从哈希映射中提取元素并更新它

时间:2012-01-26 00:47:26

标签: java map hashmap

如果我通过方法get(<key>)从哈希映射中提取元素并更新提取的元素,这些更新是否会在地图中保留?或者我是否必须将元素重新插入哈希映射?

2 个答案:

答案 0 :(得分:5)

如果您更改了对象的字段,就像这样......

Thing thing = map.get(key);
thing.setOtherThing(yetAnotherThing);

然后它将更新地图中的值。

另一方面,如果您修改通过从地图中获取值而获得的引用...

Thing thing = map.get(key);
thing = doSomethingWith(thing);

然后你需要把它放回地图。

答案 1 :(得分:0)

如果修改Map.get(K)方法获取的对象,则无需重新插入该对象。但是,如果以hashCode()函数受影响的方式更改键,则需要在修改键之前删除映射条目,然后使用新键将值重新设置。

考虑以下地图损坏案例:

Map<List<String>, String> map = new HashMap<List<String>, String>();

List<String> key1 = new ArrayList<String>();
key1.add("key1");

map.put(key1, "value1");
System.out.println(map.get(key1)); //prints "value1"

key1.add("buzz2");
System.out.println(map.get(key1)); //prints "null"

List<String> k = map.keySet().iterator().next();
System.out.println(map.get(k)); //prints "null"

故事的故事:对于地图,总是使用不可变的键,如String或int。