Java先将key和val插入Hashtable,再在外面改key的属性,用containsKey(key)返回false,但entrySet()中还有
答案:2 悬赏:10 手机版
解决时间 2021-04-16 18:44
- 提问者网友:嘚啵嘚啵
- 2021-04-16 10:12
Java先将key和val插入Hashtable,再在外面改key的属性,用containsKey(key)返回false,但entrySet()中还有
最佳答案
- 五星知识达人网友:雪起风沙痕
- 2021-04-16 10:34
这个很正常,没错的程序。
你两个key是不相等的。
再讲清楚一点。这种hashtable的实现有关。
对于你这个例子,你God key = new God();时,这个key的hashcode比如是1,你把这个对象put到table里去,table就根据1这个数计算了一个内存地址给key了。
你setName后,对于你的key来说它的hashcode就变了,比如说变成2.这时对于table来说,它只包含内存地址为1的一个对象,并没有地址为2的对象。当然你就在containsKey里找不到了。如果,你再put一下,table就会根据2这个数来分个内存地址给key。这两个地址其实都是指向一个对象key
你两个key是不相等的。
再讲清楚一点。这种hashtable的实现有关。
对于你这个例子,你God key = new God();时,这个key的hashcode比如是1,你把这个对象put到table里去,table就根据1这个数计算了一个内存地址给key了。
你setName后,对于你的key来说它的hashcode就变了,比如说变成2.这时对于table来说,它只包含内存地址为1的一个对象,并没有地址为2的对象。当然你就在containsKey里找不到了。如果,你再put一下,table就会根据2这个数来分个内存地址给key。这两个地址其实都是指向一个对象key
全部回答
- 1楼网友:山有枢
- 2021-04-16 11:52
这个程序没错啊,写一个简单一点的例子你就能理解了。
Hashtable table= new Hashtable();
int i = 1;
table.put(i,"1");
System.out.println(table.containsKey(i));
i = 2;
System.out.println(table.containsKey(i));
这样的话 输出结果为:
true
false
跟你上面的代码意义是一样的追问谢谢了,你这个通俗易懂,但没道出Hashtable的真正实现原理。还是要谢谢你啦。
Hashtable
int i = 1;
table.put(i,"1");
System.out.println(table.containsKey(i));
i = 2;
System.out.println(table.containsKey(i));
这样的话 输出结果为:
true
false
跟你上面的代码意义是一样的追问谢谢了,你这个通俗易懂,但没道出Hashtable的真正实现原理。还是要谢谢你啦。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯