2015-04-08 35 views
2

我對LinkedHashMap有這個疑惑。 Set我們沒有任何鍵值對,所以當我們嘗試打印設置元素時,我們將無法獲得打印元素的保存順序,因爲我們插入了,意味着順序不會保留,但是當我們使用LinkedHashSet時,這將確保順序將被保留,因爲我們已經將該元素插入到鏈接的散列集中,而打印時我們將得到相同的順序。這是有道理的。關於地圖和鏈接哈希映射的困惑

但是在Map的情況下,我們僅使用鍵打印值,那麼LinkedHashMap保留順序的邏輯是什麼?我們應該使用鍵打印這些值,因此無論鍵值對如何,鍵都會打印其值。它必須去映射並搜索該密鑰並最終打印其值。

我希望你能得到我的問題..

+1

你也可以迭代映射。 – Pratik

+0

內部設置包裹在地圖中。看看HashSet和LinkedHashSet的代碼 – Prashant

回答

3

當你迭代映射將在鏈接哈希地圖管理您的訂單。

這不是你總是隻使用鍵獲取值。您需要從地圖中獲取所有元素,並且您可能沒有意識到它。例如 - 創建使用地圖創建選擇下拉菜單。

for (Map.Entry<String, String> entry : map.entrySet()) 
{ 
    System.out.println(entry.getKey() + "/" + entry.getValue()); 
} 
3

所以什麼是在說鏈接哈希地圖中保持秩序

LinkedHashMap蜜餞(默認),其中的關鍵是首先插入地圖的順序邏輯。您可以使用keySet或使用entrySet的條目遍歷密鑰,以便按照此順序獲取密鑰/條目。

+0

Map m = new HashMap (); \t \t \t \t \t \t m.put(1,「1」); (2,「2」); (3,「3」); (4,「4」); (5,「5」); (6,「6」); (7,「7」); (8,「8」); (9,「9」); (10,「10」); \t \t m.put(11,「11」); (12,「12」); \t \t m。放(圖13, 「13」); (14,「14」); (15,「15」); (16,「16」); \t \t m.put(17,「17」); \t \t m.put(18,「18」); \t \t \t \t \t \t 爲\t(整數i:m.keySet()){ \t \t \t是System.out.print(」「+ m.get(I)); \t \t} – MAX

+0

我總是得到輸出1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 17 16 18 所以,在鏈接散列圖中保留的順序有所不同 – MAX

+0

如果我要使用鏈接哈希映射,我會得到相同的輸出 – MAX

2

首先,您可以在不使用密鑰的情況下訪問map的值,您可以使用值method.and取決於場景。

0

除了已經提到的方法之外,您還可以使用map.forEach()以插入順序遍歷映射條目。