使用HashMap來完成Map的遍歷,主要記錄Map遍歷的過程:
-
第一種:
ForEach循環進行遍歷
public static void forEachTest() {
//注意此處的泛型不是基本類型而是其包裝類型
//阿里java編程規範中強調聲明時最好默認大小
Map<Integer,Integer> map = new HashMap<Integer, Integer>(3);
//put時可直接put基本類型,可瞭解裝箱和拆箱
map.put(1,1);
map.put(2,2);
map.put(3,3);
for (Map.Entry<Integer,Integer> entry : map.entrySet()) {
System.out.println("map key :" + entry.getKey() + ";map value :" + entry.getValue());
}
}
-
第二種:
ForEach迭代鍵值對
public static void forEachKeyValueTest() {
Map<Integer,Integer> map = new HashMap<Integer, Integer>(3);
map.put(1,1);
map.put(2,2);
map.put(3,3);
for (Integer key : map.keySet()) {
System.out.println("map key :" + key + ";map value :" + map.get(key));
}
for (Integer value : map.values()) {
System.out.println("map value :" + value);
}
}
-
第三種:
迭代器模式
public static void iteratorTest() {
Map<Integer,Integer> map = new HashMap<Integer, Integer>(3);
map.put(1,1);
map.put(2,2);
map.put(3,3);
//不帶泛型
Iterator iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry entry = (Map.Entry) iterator.next();
System.out.println("map key :" + entry.getKey() + ";map value :" + entry.getValue());
}
//帶泛型
Iterator<Map.Entry<Integer,Integer>> entryIterator = map.entrySet().iterator();
while (entryIterator.hasNext()) {
Map.Entry<Integer,Integer> entry = entryIterator.next();
System.out.println("map key :" + entry.getKey() + ";map value :" + entry.getValue());
}
}
-
第四種:
lambda模式迭代
public static void lambdaTest() {
Map<Integer,Integer> map = new HashMap<Integer, Integer>(3);
map.put(1,1);
map.put(2,2);
map.put(3,3);
//x,y爲參數代表key和value
map.forEach((x,y) -> System.out.println("map key :" + x + ";map value :" + y));
}
對比幾種遍歷的效率
《阿里巴巴java開發手冊》時候,有一條推薦的規約: 【推薦】使用entrySet遍歷Map類集合KV,而不是keySet方式進行遍歷。 說明:keySet其實是遍歷了2次,一次是轉爲Iterator對象,另一次是從hashMap中取出key所對應的value。而entrySet只是遍歷了一次就把key和value都放到了entry中,效率更高。
foreachKeySet 遍歷 map耗時: 24 ms
foreachEntry 遍歷 map耗時: 17 ms
iteratorEntry 遍歷 map耗時: 16 ms
lambda 遍歷 map耗時: 59 ms