解决方案 »

  1.   

    因为next()的返回值类型就是一个Edge,所以可以对这个返回值继续调用next()。相当于
    Edge e1 = new Edge(a,b,5);
    Edge e2 = new Edge(a,d,5);
    Edge e3 = new Edge(a,e,7);
    e2.next(e3);
    e1.next(e2);graph.routeTable.put(a,e1);
      

  2.   

    另外,Java是有连续调用的情况,这个结构也可以连续调用。但此处是不能连续调用的,否则语义上有错误。你对源代码的理解有错误,要看清楚括号的配对。
      

  3.   

      嗯,我不懂的是这样存到hashtable里面是什么个样子,是什么结构,该如何遍历或者去除呢,因为它只有一个Key啊。
      

  4.   

    为什么还用hashtable,不是早就被hashmap给替代了
      

  5.   

    这你就得理解hashTable的存储原理了,hashTable一般说就说是键值对,但是其存储时,是数组+链表的形式。数组用来存index,而链表存的就是对应的值。
    graph.routeTable.put(a, new Edge(a, b, 5).next(new Edge(a, d, 5).next(new Edge(a, e, 7))));
    其实是a所在数组小标下有(a,b,5)而(a,b,5)又处在链表的第一个节点,同时指向下一个(a,d,5)-->(a,e,7)。
    每个数组指向了一个链表。
       a  ,  x  ,  x,  x,
        |
    (a,b,5)
        |
    (a,d,5)
    希望我画的这个简略图你看得懂。