重命名hashmap的键值而不是重新插入

时间:2016-02-21 14:43:13

标签: java hashmap

正如标题所说,有一种简单的方法来改变我的hashmap的键吗?

这里我更新了我的hashmap的所有值

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

现在我想更改密钥,我之前使用删除和插入有效的数据,但订单已更改,我不想发生。

3 个答案:

答案 0 :(得分:3)

如果您想使用HashMap,您的密钥在插入后不应更改。

如果订单对您很重要,您应该使用SortedMap(例如TreeMap)的实现。

答案 1 :(得分:1)

我认为你不能。 HashMap没有顺序,根据密钥的哈希值插入对象,如果更改密钥,则更改其哈希值,从而更改其显示在HashMap内的桶。如果您想订购地图,最好使用TreeMap

我们遇到了从Java 7迁移到Java 8的问题。几个测试基于HashMaps toString值断言HashMap的内容,这没有确定的顺序,但在Java 7下它似乎但是在Java 8下测试失败了。

答案 2 :(得分:1)

HashMap不保证商品的顺序,它们在HashMap内的位置由根据密钥计算的hashcode确定。因此,更改密钥将更改位置,因为您实际删除了先前的key value条目并插入了新条目。

来自HashMap documentation

  

此课程不保证地图的顺序;特别是,它不保证订单会随着时间的推移保持不变。