map集合遍歷的三種方式「map怎麼遍歷刪除」

1、由來

我們應該在什麼時刻選擇什麼樣的遍歷方式呢,必須通過實踐的比較才能看到效率,也看了很多文章,大家建議使用entrySet,認為entrySet對於大數據量的查找來說,速度更快,今天我們就通過下面採用不同方法遍歷key+value,key,value不同情景下的差異。

2、準備測試數據:

HashMap1:大小為1000000,key和value的值均為String,key的值為1、2、3………1000000;

Map<String,String> map =new HashMap<String,String>();
    String key,value;

    for(int i=1;i<=num;i++){
        key = ""+i;
        value="value"+i;
        map.put(key,value);
    }

HashMap2:大小為1000000,key和value的值為String,key的值為50、100、150……..50000000;

Map<String,String> map = new HashMap<String,String>();
   String key,value;

   for(int i=1;i<=num;i++){
       key=""+(i*50);
       value="value"+key;
       map.put(key,value);
}

3、場景測試

3.1遍歷key+value

1)keySet利用Iterator遍歷

long startTime1 =System.currentTimeMillis();
Iterator<String> iter = map.keySet().iterator();
while (iter.hasNext()){
      key=iter.next();
      value=map.get(key);
}
long endTime1 =System.currentTimeMillis();
System.out.println("第一個程序運行時間:"+(endTime1-startTime1)+"ms");

2)keySet利用for遍歷

long startTime2 =System.currentTimeMillis();
  for(String key2:map.keySet()){
      value=map.get(key2);
  }
long endTime2 =System.currentTimeMillis();
System.out.println("第二個程序運行時間:"+(endTime2-startTime2)+"ms");

3)entrySet利用Iterator遍歷

long startTime3=System.currentTimeMillis();
Iterator<Map.Entry<String,String>> iter3 =map.entrySet().iterator();
Map.Entry<String,String> entry3;
while (iter3.hasNext()){
    entry3 = iter3.next();
    key = entry3.getKey();
    value=entry3.getValue();
}
long endTime3 =System.currentTimeMillis();
System.out.println("第三個程序運行時間:" +(endTime3-startTime3)+"ms");

4)entrySet利用for遍歷

long startTime4=System.currentTimeMillis();
for(Map.Entry<String,String> entry4:map.entrySet()){
    key=entry4.getKey();
    value=entry4.getValue();
}
long endTime4 =System.currentTimeMillis();
System.out.println("第四個程序運行時間:"+(endTime4-startTime4) +"ms");

3.2遍歷key

1)keySet利用Iterator遍歷

long startTime1 =System.currentTimeMillis();
Iterator<String> iter = map.keySet().iterator();
while (iter.hasNext()){
    key=iter.next();

}
long endTime1 =System.currentTimeMillis();
System.out.println("第一個程序運行時間:"+(endTime1-startTime1)+"ms");

2)keySet利用for遍歷

long startTime2 =System.currentTimeMillis();
for(String key2:map.keySet()){

}
long endTime2 =System.currentTimeMillis();
System.out.println("第二個程序運行時間:"+(endTime2-startTime2)+"ms");

3)entrySet利用Iterator遍歷

 long startTime3=System.currentTimeMillis();
Iterator<Map.Entry<String,String>> iter3 =map.entrySet().iterator();
Map.Entry<String,String> entry3;
while (iter3.hasNext()){
    key = iter3.next().getKey();

}
long endTime3 =System.currentTimeMillis();
System.out.println("第三個程序運行時間:" +(endTime3-startTime3)+"ms");

4)entrySet利用for遍歷

 long startTime4=System.currentTimeMillis();
for(Map.Entry<String,String> entry4:map.entrySet()){
    key=entry4.getKey();
}
long endTime4 =System.currentTimeMillis();
System.out.println("第四個程序運行時間:"+(endTime4-startTime4) +"ms");

3.3遍歷value

1)keySet利用Iterator遍歷

long startTime1 =System.currentTimeMillis();
Iterator<String> iter = map.keySet().iterator();
while (iter.hasNext()){
   value=map.get(iter.next());
}
long endTime1 =System.currentTimeMillis();
System.out.println("第一個程序運行時間:"+(endTime1-startTime1)+"ms");

2)keySet利用for遍歷

 long startTime2 =System.currentTimeMillis();
for(String key2:map.keySet()){
    value=map.get(key2);
}
long endTime2 =System.currentTimeMillis();
System.out.println("第二個程序運行時間:"+(endTime2-startTime2)+"ms");

3)entrySet利用Iterator遍歷

 long startTime3=System.currentTimeMillis();
Iterator<Map.Entry<String,String>> iter3 =map.entrySet().iterator();
Map.Entry<String,String> entry3;
while (iter3.hasNext()){
   value=iter3.next().getValue();

}
long endTime3 =System.currentTimeMillis();
System.out.println("第三個程序運行時間:" +(endTime3-startTime3)+"ms");

4)entrySet利用for遍歷

long startTime4=System.currentTimeMillis();
for(Map.Entry<String,String> entry4:map.entrySet()){
    value=entry4.getValue();
}
long endTime4 =System.currentTimeMillis();
System.out.println("第四個程序運行時間:"+(endTime4-startTime4) +"ms");

5)values利用iterator遍歷

 long startTime5=System.currentTimeMillis();
Iterator<String>  iter5=map.values().iterator();
while (iter5.hasNext()){
    value=iter5.next();
}
long endTime5 =System.currentTimeMillis();
System.out.println("第五個程序運行時間:"+(endTime5-startTime5) +"ms");

6)values利用for遍歷

long startTime6=System.currentTimeMillis();
for(String value6:map.values()){

}
long endTime6 =System.currentTimeMillis();
System.out.println("第六個程序運行時間:"+(endTime6-startTime6) +"ms");

4、時間對比

4.1遍歷key+value

Java遍歷Map集合有哪幾種方式?各自效率怎麼樣?

4.2遍歷key

Java遍歷Map集合有哪幾種方式?各自效率怎麼樣?

4.3遍歷value

Java遍歷Map集合有哪幾種方式?各自效率怎麼樣?

5、總結

從上面的時間比較來看:

1)map的key採用簡單形式和複雜形式時,查找的效率是不同的,簡單的key值效率更高

2)當數據量大的時候,採用entrySet遍歷key+value的效率要高於keySet

3)當我們只需要取得value值時,採用values來遍歷效率更高

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/273226.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-17 14:04
下一篇 2024-12-17 14:04

相關推薦

發表回復

登錄後才能評論