2017-05-18 34 views
1

我插入的ArrayList到地圖(對象ID作爲密鑰和對象作爲值)。的Hashmap插入第一個記錄在第12索引

第一次插入發生在第12個索引處。

由於HashMap的默認大小爲16,它將在第一個索引中插入第4條記錄(因爲到達最後的索引意味着第16條)。

所以我得到錯誤的順序。即使我試過LinkedHashMap。相同的結果即將到來。

這裏是我的代碼:

for (Type object: Objects) { 
     map.put(object.obj.getId() , object); 
    } 

請幫我解決這個問題。

謝謝。

+5

你期望什麼順序? HashMap沒有排序? LinkedHashMap爲您提供了廣告訂單。如果你想要排序的鍵,使用TreeMap。 – Eran

+0

@Eran我在Map中插入6條記錄。插入從第12個索引開始。 (我通過調試看到了。)但是我想從第一次開始。 –

+0

你不控制索引(至少不是直接)。索引是根據'hashCode'確定的。無論如何,你不應該關心索引。 – Eran

回答

1

LinkedHashMap正是你正在尋找的。

它與HashMap完全相同,只是當您迭代它時,它會按插入順序呈現項目。

1

地圖並非用於基於索引的訪問。沒有什麼像map.get(index)。所有這一切都可以被保存以便在其他的答案/評論描述而迭代:

for (Type object: Objects) { 
    map.put(object.obj.getId() , object); 
} 
for (Entry entry: map.entrySet()) { 
    // should be same order as inserted if LinkedHashMap is used 
} 

你不應該在乎的地圖是內部狀態。所有這些都是API所描述的行爲。

+0

但這裏插入本身就是一個問題。最後一條記錄是在開頭插入。 –

+0

@SivaPasupathi否,LinkedHashMap的內部數據將其存儲在hastable中的某個索引處。這並不意味着它的行爲如此。停止調試到庫中並開始閱讀API文檔。如果您嘗試我的示例,它將完全按照所述工作。您看到存儲在第12個索引處的元素將在迭代後首先顯示。 –

相關問題