2016-02-21 3 views
0

Как говорится в названии, есть простой способ изменить ключ моего хэш-карты?Переименование значения ключа hashmap вместо повторного ввода

Здесь я обновляю все значения моей HashMap

stock.put(itemCode.getText(), new StockData.Item(itemName.getText(),(Double) priceS.getValue(), (Integer)quantityS.getValue(), file.getName())); 

и теперь я хотел бы изменить ключ, я использовал ранее удаления и вставки данных, которые работали, но порядок был изменен, который я не хочу произойдет.

+1

«HashMap» _has no order_. Что вы подразумеваете под «изменением порядка»? –

ответ

3

Если вы хотите использовать HashMap, ваши ключи не должны меняться после вставки.

Если заказ относится к вам, вы должны использовать реализацию SortedMap (например, TreeMap).

1

Я не думаю, что вы можете. A HashMap не имеет порядка, объекты вставлены на основании значения хэша ключа, если вы меняете ключ, вы меняете его хэш и, следовательно, ведро оно появляется внутри HashMap. Если вы хотите заказать карту вы лучше с помощью TreeMap

Мы поражаем эту проблему, двигаясь из Java 7 в Java 8 несколько тестов, утверждали содержимое HashMap на основе значения по HashMapstoString, это не имеет установленного порядка, но в Java 7 он работал, но тесты не удались под Java 8.

+1

Или «LinkedHashMap» - зависит от того, что хочет OP. –

+0

@BoristheSpider, который тоже сработает: D – Gavin

+0

"_several tests утверждал содержимое' HashMap' на основе 'HashMaps' toString' value_". Ooops ... –

1

HashMap не гарантирует порядок пунктов, их местоположение внутри HashMap определяется по hashcode, которое рассчитывается на основе ключа. Поэтому изменение ключа изменит местоположение, поскольку вы фактически удаляете предыдущую запись key value и вставляете новую запись.

От HashMapdocumentation

Этот класс не дает никаких гарантий относительно того, карты; в частности, он не гарантирует, что порядок будет оставаться постоянным с течением времени.

Смежные вопросы