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