關於java中遍歷map具體有四種方式,請看下文詳解。
1、這是最常見的並且在大多數情況下也是最可取的遍歷方式,在鍵值都需要時使用。
Map<Integer, Integer> map = new?HashMap<Integer, Integer>();
for?(Map.Entry<Integer, Integer> entry : map.entrySet()) {
System.out.println("Key = "?+ entry.getKey() + ", Value = "?+ entry.getValue());
}
2、在for-each循環中遍歷keys或values。
如果只需要map中的鍵或者值,妳可以通過keySet或values來實現遍歷,而不是用entrySet。
Map<Integer, Integer> map = new?HashMap<Integer, Integer>();
for?(Integer key : map.keySet()) {
System.out.println("Key = "?+ key);
}
for?(Integer value : map.values()) {
System.out.println("Value = "?+ value);
}
該方法比entrySet遍歷在性能上稍好(快了10%),而且代碼更加幹凈。
3、使用Iterator遍歷
使用泛型:
Map<Integer, Integer> map = new?HashMap<Integer, Integer>();
Iterator<Map.Entry<Integer, Integer>> entries = map.entrySet().iterator();
while?(entries.hasNext()) {
Map.Entry<Integer, Integer> entry = entries.next();
System.out.println("Key = "?+ entry.getKey() + ", Value = "?+ entry.getValue());
}
不使用泛型:
Map map = new?HashMap();
Iterator entries = map.entrySet().iterator();
while?(entries.hasNext()) {
Map.Entry entry = (Map.Entry) entries.next();
Integer key = (Integer)entry.getKey();
Integer value = (Integer)entry.getValue();
System.out.println("Key = "?+ key + ", Value = "?+ value);
}
4、通過鍵找值遍歷(效率低)
Map<Integer, Integer> map = new?HashMap<Integer, Integer>();
for?(Integer key : map.keySet()) {
Integer value = map.get(key);
System.out.println("Key = "?+ key + ", Value = "?+ value);
}
假設Map中的鍵值對為1=>11,2=>22,3=>33,現用方法1來遍歷Map代碼和調試結果如下:
擴展資料:
1、HashMap的重要參數
HashMap 的實例有兩個參數影響其性能:初始容量 和加載因子。容量是哈希表中桶的數量,初始容量只是哈希表在創建時的容量。
加載因子 是哈希表在其容量自動增加之前可以達到多滿的壹種尺度。當哈希表中的條目數超出了加載因子與當前容量的乘積時,則要對該哈希表進行 rehash 操作(即重建內部數據結構),從而哈希表將具有大約兩倍的桶數。
在Java編程語言中,加載因子默認值為0.75,默認哈希表元為101。
2、HashMap的同步機制
註意,此實現不是同步的。 如果多個線程同時訪問壹個哈希映射,而其中至少壹個線程從結構上修改了該映射,則它必須保持外部同步。
(結構上的修改是指添加或刪除壹個或多個映射關系的任何操作;以防止對映射進行意外的非同步訪問,如下:
Map m = Collections.synchronizedMap(new HashMap(...));
參考資料: