首页 新闻 会员 周边

java中HashTable的put这样使用是什么意思?

0
悬赏园豆:30 [待解决问题]
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()是什么意思? 请大家指教!

AsherTan的主页 AsherTan | 初学一级 | 园豆:73
提问于:2014-04-18 18:23
< >
分享
所有回答(4)
0

new Edge(a,b,5).next().next()

为什么next()方法里没有参数呢?

1     public Edge next(Edge edge) {
2         this.next = edge;
3         return this;
4     }

这段代码具体是干什么的呀?又是初始化next属性,又是返回自身?

最最主要的是我没有看见Hashtable啊,标题是要闹哪样?

ThreeTree | 园豆:1490 (小虾三级) | 2014-04-18 18:46

难道我看花眼了,还是楼主后来加了最后面的代码?

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构成的边)

支持(0) 反对(0) ThreeTree | 园豆:1490 (小虾三级) | 2014-04-19 12:55
0

你从最里面的一层开始看

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方法得到从这个节点出发的所有边。

琴剑飘零 | 园豆:419 (菜鸟二级) | 2014-04-18 19:20

补充一下,所以说,不是new Edge(a,b,5).next().next(),你把括号给看串了,是new E().next(new E.next())

支持(0) 反对(0) 琴剑飘零 | 园豆:419 (菜鸟二级) | 2014-04-18 19:23
0

还是直接一点吧!对于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。

flab | 园豆:208 (菜鸟二级) | 2014-05-06 12:41
0

呵呵,楼主,其实这很简单的,这是一种树形的数据结构,二叉树的存储结构,用来表示数据表之间一对多的关系,它是一种非线性结构。树的定义是递归的(就是自己调用自己)。用树来定义树。因此,树(以及二叉树)的许多算法都使用了递归。

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());

Even丶 | 园豆:218 (菜鸟二级) | 2014-05-12 11:12

正确!

支持(0) 反对(0) masque | 园豆:210 (菜鸟二级) | 2014-06-26 10:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册