【发布时间】:2013-08-30 02:23:56
【问题描述】:
以下程序维护 2 个数据结构,命名为:
map of type HashMap
map_1 also of type HashMap
在开头map 填充有key : 1 和value : suhail。然后这个映射被插入到map_1,键为20。
map 再次填充了key : 1 和另一个value : CSE。这张地图再次插入map_1。
import java.util.*;
class KeyTest {
public static void main(String args[]) {
Map<Integer,String> map = new HashMap<Integer,String>();
Map<Integer,Object> map_1 = new HashMap<Integer,Object>();
map.put(1,"suhail");
map_1.put(20,map);
map.put(1,"CSE");
map_1.put(21,map);
Set<Integer> keys = map_1.keySet();
Iterator i = keys.iterator();
while(i.hasNext()) {
System.out.println(map_1.get((Integer)i.next()));
}
}
}
当我打印 map_1 值时,这就是我得到的:
{1=CSE}
{1=CSE}
但这不是我所期望的。在我看来,程序应该是这样运行的:
[1,suhail]--> map
[20,[1,suhail]]---> map_1
[1,CSE]--> map (A replace, because of the same keys)
[21,[1,CSE]]--->map_1
所以输出应该是:
[1,suhail]
[1,CSE]
谁能解释一下,为什么我没有得到这个输出
【问题讨论】:
-
地图中的关键 1 首先指向“suhail”,然后指向“CSE”,因此它是 CSE,并且永远是 :)
-
它将是 CSE,直到您使用键 1 将其他内容放入其中,因此“始终”在这里是相对的 :)
-
这很好地说明了为什么在将可变对象插入容器时应该小心。