欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

map怎么遍历删除(map集合遍历的三种方式)

4.2遍历key

map怎么遍历删除(map集合遍历的三种方式)

4.3遍历value

map怎么遍历删除(map集合遍历的三种方式)

5、总结

从上面的时间比较来看:

1)map的key采用简单形式和复杂形式时,查找的效率是不同的,简单的key值效率更高

2)当数据量大的时候,采用entryset遍历key+value的效率要高于keyset

3)当我们只需要取得value值时,采用values来遍历效率更高