map怎么遍历删除(map集合遍历的三种方式)
程序员文章站
2023-11-27 18:46:22
1、由来我们应该在什么时刻选择什么样的遍历方式呢,必须通过实践的比较才能看到效率,也看了很多文章,大家建议使用entryset,认为entryset对于大数据量的查找来说,速度更快,今天我们就通过下面...
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
4.2遍历key
4.3遍历value
5、总结
从上面的时间比较来看:
1)map的key采用简单形式和复杂形式时,查找的效率是不同的,简单的key值效率更高
2)当数据量大的时候,采用entryset遍历key+value的效率要高于keyset
3)当我们只需要取得value值时,采用values来遍历效率更高
推荐阅读
-
map怎么遍历删除(map集合遍历的三种方式)
-
map怎么遍历删除(map集合遍历的三种方式)
-
Java 遍历取出Map集合key-value数据的4种方法
-
C#在foreach遍历删除集合中元素的三种实现方法
-
JavaScript遍历数组的三种方法map、forEach与filter实例详解
-
Java中遍历Map集合的5种方式总结
-
Map集合的遍历方式以及TreeMap集合保存自定义对象实现比较的Comparable和Comparator两种方式
-
什么是Map?它的基本功能和获取功能?Map的遍历方式?
-
Java 遍历取出Map集合key-value数据的4种方法
-
List,Set,Map遍历方式 (收集的资源,值得看一下)