网站首页 > 技术文章 正文
最近在面试的时候笔试碰到一道关于map的题,请手写出map遍历效率最高的方法。
关于map遍历的方式相信大家都知道,但是各个方法的一个效率高低可能有些人平常没有注意,所以在这做了一个简单的测试。
public class MapBianLiXiaoLvBiJiao {
private static Map<Integer,Integer> map=new HashMap<>();
static {
for (int i=0;i<10000;i++){
int j=0;
j+=i;
map.put(i,j);
}
}
public static void main(String[] args) {
MapBianLiXiaoLvBiJiao mapBianLiXiaoLvBiJiao = new MapBianLiXiaoLvBiJiao();
mapBianLiXiaoLvBiJiao.foreachMethod();
mapBianLiXiaoLvBiJiao.keySetMethod();
mapBianLiXiaoLvBiJiao.iteratorMethod();
mapBianLiXiaoLvBiJiao.streamForeachMethod();
}
// 通过foreach遍历entry
public void foreachMethod(){
Long startTime=System.currentTimeMillis();
for (Map.Entry<Integer,Integer> entry:map.entrySet()){
Integer key= entry.getKey();
Integer value=entry.getValue();
}
long endTime=System.currentTimeMillis();
System.out.println("foreach花费时间为:"+(endTime-startTime));
}
// 通过遍历keySet并获取value
public void keySetMethod(){
Long startTime=System.currentTimeMillis();
for (Integer key:map.keySet()){
Integer value=map.get(key);
}
long endTime=System.currentTimeMillis();
System.out.println("keySet遍历花费时间为:"+(endTime-startTime));
}
// 通过迭代器iterator遍历
public void iteratorMethod(){
Long startTime=System.currentTimeMillis();
Iterator<Map.Entry<Integer,Integer>> it=map.entrySet().iterator();
while (it.hasNext()){
Map.Entry<Integer,Integer> entry=it.next();
Integer key=entry.getKey();
Integer value=entry.getValue();
}
long endTime=System.currentTimeMillis();
System.out.println("iterator遍历花费时间为:"+(endTime-startTime));
}
// 通过map.forEach
public void streamForeachMethod(){
Long startTime=System.currentTimeMillis();
map.forEach((key,value) -> {
Integer key1=key;
Integer value1=value;
});
long endTime=System.currentTimeMillis();
System.out.println("转换为流遍历花费时间为:"+(endTime-startTime));
}
}
执行结果如下:
foreach花费时间为:7
keySet遍历花费时间为:5
iterator遍历花费时间为:1
转换为流遍历花费时间为:122
经过上面的小测试可以看出,通过iterator迭代器对map进行遍历的方式效率是最高的,而map.forEach()遍历的效率是最低
猜你喜欢
- 2025-07-20 Hutool JSONUtil巧妙过滤null值:JSON转Map数据清洗的终极方案
- 2025-07-20 HBase基础知识,面向列的实时分布式数据库
- 2025-07-20 Java Map 所有的值转为String类型
- 2025-07-20 HashMap-entrySet( )原理(hashmap原理详解)
- 2025-07-20 常见的Java性能问题,我来手把手教你定位!
- 2025-07-20 面试怕被问Hashmap,多看看这个文章
- 2025-07-20 面试官:知道ThreadLocal嘛?谈谈你对它的理解?
- 2025-07-20 内存溢出OutOfMemoryError科普系列一
- 2025-07-20 HashMap详解(hashmap理解)
- 2025-07-20 往简单的方向深入理解,或许反应式编程更容易入门
- 最近发表
-
- Qt编程进阶(63):Qt Quick高级控件的使用
- Qt编程进阶(47):QML鼠标事件处理(qt编程难不难)
- 使用Xamarin和Visual Studio开发Android可穿戴设备应用
- Qt使用教程:创建Qt Quick应用程序(三)
- QML性能优化 | 常见界面元素优化(qml布局自适应大小)
- Qt使用教程:创建移动应用程序(二)
- Qt Quick 多媒体开发播放音乐和视频
- Qt使用教程:创建Qt Quick UI表单(三)
- 如何将 Qt 3D 渲染与 Qt Quick 2D 元素结合创建太阳系行星元素?
- QML控件:TextInput, TextField, TextEdit, TextArea用法及自定义
- 标签列表
-
- axure 注册码 (25)
- exploit db (21)
- mutex_lock (30)
- oracleclient (27)
- nfs (25)
- springbatch (28)
- oracle数据库备份 (25)
- dir (26)
- connectionstring属性尚未初始化 (23)
- output (32)
- panel滚动条 (28)
- centos 5 4 (23)
- sql学习 (33)
- c 数组 (33)
- pascal语言教程 (23)
- ppt 教程 (35)
- java7 (24)
- 自适应网站制作 (32)
- server服务自动停止 (25)
- 超链接去掉下划线 (34)
- 什么是堆栈 (22)
- map entry (25)
- ubuntu装qq (25)
- outputstreamwriter (26)
- fill_parent (22)