簡體   English   中英

Map.keySet和Map.values上的迭代順序相同?

[英]Same iteration order on Map.keySet and Map.values?

對於像這樣的地圖:

Map<Integer, Integer> map = ...;
map.put(1, 1);
map.put(2, 2);
map.put(3, 3);
map.put(4, 4);

這個代碼是......

for (Integer i : map.keySet()) System.out.println(i);
for (Integer i : map.values()) System.out.println(i);

...保證兩次打印相同的序列?

如果沒有,是否有任何保證,例如java.util.HashMap

不,沒有保證,雖然在實踐中它會發生(沒有充分的理由讓地圖為鍵和值使用不同的迭代器)。

如果要保證迭代順序,請迭代entrySet()

for (Map.Entry<Integer,Integer> entry : map.entrySet())
    // ...

由於您詢問HashMap ,請注意,由於mapbeing重新定義,對地圖的任何更改都可能會更改迭代順序。

不,不保證。 一個是Set ,一個是Collection ,既不保證訂單。

如果您想保留訂單。 可以使用entrySet()幫助您使用LinkedHashMap()

是。 有點。 您可以使用SortedMap的子類,即TreeMap 這將使密鑰保持自然順序。 (或者你可以給它一個特定的比較器)。 但是當你使用樹形圖時,你必須確保compareTo方法“必須與equals一致”。 閱讀javadocs了解更多詳情。 但簡而言之,是的,您可以對地圖進行排序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM