今天來看一道經典的 HashMap 遍歷順序題目,考察對 HashMap 無序特性及兩種遍歷方式的理解。
public class Ques1101 {
public static void main(String[] args) {
HashMap<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < 100; i++) {
map.put(i, i);
}
// 遍歷 1:keySet
for (Integer key : map.keySet()) {
Integer value = map.get(key);
System.out.println(key + "---" + value);
}
// 遍歷 2:entrySet
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
Integer key = entry.getKey();
Integer value = entry.getValue();
System.out.println(key + "---" + value);
}
}
}
hashCode() 決定,**不保證任何順序**(插入順序、自然順序、訪問順序均不保證)。map.get(key) 查找 ValueMap.Entry<K,V> 集合視圖輸出 100 行 "i---i" (i=0..99),順序非 0,1,2...99 例如: 12---12 3---3 89---89 ... (兩段輸出順序完全相同)
LinkedHashMap(雙向鏈表維護順序)。TreeMap(紅黑樹,Key 需實現 Comparable 或提供 Comparator)。map.forEach((k,v) -> System.out.println(k+"---"+v)); 底層仍走 entrySet,代碼更簡潔。每日一題,堅持精進! 關注公眾號/簡書獲取更多題目解析。