2016-02-21 26 views
0

正如標題所說有一個簡單的方法來改變我的HashMap的關鍵?重命名的HashMap的鍵值,而不是重新插入

這裏更新我的HashMap

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

的所有值,現在我想改變的關鍵,我用前面刪除和插入數據的工作,但順序改變,我不想即將發生。

+1

一個'HashMap' _has沒有order_。 「_訂單已更改_」是什麼意思? –

回答

3

下失敗了。如果你想使用一個HashMap,你的鑰匙應該插入後不會改變。

如果訂單對您而言很重要,您應該使用SortedMap(例如TreeMap)的實施。

1

我不認爲你可以。 一個HashMap沒有秩序,對象是基於密鑰的散列值插入,如果你改變了密鑰,你改變它的哈希,從而桶它HashMap內出現英寸如果您要訂購的地圖,你是關閉使用好TreeMap

我們到了這個問題,移動從Java 7到Java 8個多次測試斷言基礎上,HashMapstoString值HashMap的內容,這有沒有確定的順序,但Java 7的下它似乎工作,但測試的Java 8

+1

或'LinkedHashMap' - 取決於OP所需的內容。 –

+0

@BoristheSpider,將工作太:d – Gavin

+0

「_several試驗基礎上,''HashMaps' VALUE_ toString'斷言一個'HashMap'的內容」。 Ooops ... –

1

HashMap不能保證項目的順序,它們在HashMap內的位置由hashcode決定,它是從密鑰計算出來的。因此,更改密鑰將更改位置,因爲您實際上刪除了以前的key value條目並插入了新條目。

HashMapdocumentation

此類不保證作爲對地圖的順序;特別是,它不能保證訂單會隨着時間的推移保持不變。