извлечь элемент из хэш-карты и обновить его - PullRequest
1 голос
/ 26 января 2012

Если я извлечу элемент из хеш-карты с помощью метода get(<key>) и обновлю извлеченный элемент, сохранятся ли эти обновления на карте? Или мне нужно повторно вставить элемент обратно в хэш-карту?

Ответы [ 2 ]

5 голосов
/ 26 января 2012

Если вы измените поля объекта, который вы получили, как это ...

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

тогда это обновит значение на карте.

С другой стороны, если вы измените ссылку, которую вы получили, получив значение из карты ...

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

тогда вам нужно положить его обратно на карту.

0 голосов
/ 26 января 2012

Если вы модифицируете объект, полученный методом 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.

...