public class Edge { //Name of origin town public Node origin; //Name of destination town public Node destination; //Route weight to destination public int weight; //next possible route public Edge next; //constructor public Edge(Node origin, Node destination, int weight) { this.origin = origin; this.destination = destination; this.weight = weight; this.next = null; } public Edge next(Edge edge) { this.next = edge; return this; } }
graph.routeTable.put(a, new Edge(a, b, 5).next(new Edge(a, d, 5).next(new Edge(a, e, 7))));
new Edge(a,b,5).next().next()连着用.netx()是什么意思? 请大家指教!
new Edge(a,b,5).next().next()
为什么next()方法里没有参数呢?
1 public Edge next(Edge edge) { 2 this.next = edge; 3 return this; 4 }
这段代码具体是干什么的呀?又是初始化next属性,又是返回自身?
最最主要的是我没有看见Hashtable啊,标题是要闹哪样?
难道我看花眼了,还是楼主后来加了最后面的代码?
graph.routeTable.put(a, new Edge(a, b, 5).next(new Edge(a, d, 5).next(new Edge(a, e, 7))));
这句话的意思就是可以由 Node a 索引到一张图。
这张图由三条边构成,但是如果你使用graph.routeTable.get(a)只能得到一条边(Node a和Node b构成的边),不过这个Edge对象有一个属性next,他的类型还是Edge,也就是说graph.routeTable.get(a).next就能获取下一条边(Node a和Node b构成的边),如果继续graph.routeTable.get(a).next.next就能获取第三条边(Node a和Node e构成的边)
你从最里面的一层开始看
new Edge(a, e, 7)这是创造了一个从a->e权重为7的边(我们叫这条边X1),
new Edge(a, d, 5).next(X1)这是创造了一个a->d权重为5的边(X2,并且X2可以通过this.next引用到X1),
new Edge(a, b, 5).next(X2)这是创造了一个a->b权重为5的边(X3,并且X3可以通过this.next引用到X2),
最后把X3放到这个Map里面去,索引时a。
换句话说,以后可以用graph.routeTable.get(a)得到a->b这条边,并依此用next可以得到a到d和e的边。
这种结构类似于邻接链表,Map的索引是一个节点,可以通过get方法得到从这个节点出发的所有边。
补充一下,所以说,不是new Edge(a,b,5).next().next(),你把括号给看串了,是new E().next(new E.next())
还是直接一点吧!对于HashMap举例如下:
package com.test;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class TestHashMap {
public static void main(String[] args) {
Map map=new HashMap();
map.put("key1", "value1");
map.put("key2", "value2");
map.put("key3", "value3");
map.put("key4", "value4");
map.put("key5", "value5");
Set set=map.keySet();
for(Object key:set){
System.out.println(key+"="+map.get(key));
}
}
}
简单地说,Map相当于图,专业来讲,就是“键-值”映射,里面的每一个元素都是“key-value”映射,其中,对于一个Map来说里面的key是唯一的,也就是不能重复。至于存取元素的操作,上面讲了一种,还有一种是通过EntrySet,具体详见API文档Map-->HashMap。
呵呵,楼主,其实这很简单的,这是一种树形的数据结构,二叉树的存储结构,用来表示数据表之间一对多的关系,它是一种非线性结构。树的定义是递归的(就是自己调用自己)。用树来定义树。因此,树(以及二叉树)的许多算法都使用了递归。
graph.routeTable.put(a, new Edge(a, b, 5).next(new Edge(a, d, 5).next(new Edge(a, e, 7))));
hashtable.put(key,value);
key为 a
value为new Edge(a, b, 5).next(new Edge(a, d, 5).next(new Edge(a, e, 7)))
a到b重5 ,a到d也重5 ,a分出来两支,a到e重7,a到e中包含了a到d,所以d到e重2。
就像楼上所说的是你吧括号看串了并不是new Edge(a,b,5).next().next(),而是new E().next(new E.next());
正确!