大家好,关于高效遍历Map对象的四大策略揭秘很多朋友都还不太明白,今天小编就来为大家分享关于的知识,希望对各位有所帮助!
Java中的集合主要分为三种类型:
放
列表
Map数组:数据存在于几乎所有集合实现的底层,所以我们首先需要了解数组。以下段落摘自《Thinking In Algorithm》。感觉非常好,现在想和大家分享。
JAVA遍历Map的四种方法——大容量Map迭代推荐
《Thinking In Algorithm》 数组
采集:接下来是采集。我们还摘录了网上的解释。这非常好,而且很容易理解。我想和大家分享一下:
JAVA遍历Map的四种方法——大容量Map迭代推荐
集合和数组
总结一下上面两段:
数组的大小是固定的,同一个数组只能存储相同类型的数据,可以是基本类型,也可以是引用类型。 Java中的集合可以存储和操作不同类型和可变大小的数据,但是Java中的集合只能存储引用类型,不能存储基本类型。
地图遍历代码示例
1. 数据准备
JAVA遍历Map的四种方法——大容量Map迭代推荐
地图数据准备
2. 迭代示例
1.第一种方式
JAVA遍历Map的四种方法——大容量Map迭代推荐
次值法
2.第二种方式
JAVA遍历Map的四种方法——大容量Map迭代推荐
迭代器遍历
3、第三种方式
JAVA遍历Map的四种方法——大容量Map迭代推荐
条目集遍历
4.第四种方式
JAVA遍历Map的四种方法——大容量Map迭代推荐
Map.values值遍历
3.结果展示及总结
JAVA遍历Map的四种方法——大容量Map迭代推荐
不同长度的地图迭代结果
综上所述:
一般来说,使用entrySet方法进行遍历是最高效的,因为hashMap的内部存储结构是基于Entry的数组。这样遍历的时候,只需要遍历一次即可。使用其他方法的时间复杂度可能会增加。例如keySet方法每次都需要通过key值计算对应的hash,然后通过hash得到对应的结果值,效率较低。
最后,感谢您阅读本文。希望您能关注本标题获取最新技术建议。也欢迎您私信我告诉我您想了解的技术细节,我会给出相应的解读。
头条号:程序员的花果山。
以下内容转发自博客:https://www.cnblogs.com/zhaoguhong/p/7074597.html?utm_source=itdadaoutm_medium=referral
下面讲一下Java中遍历Map的几种方法
java中map遍历的方法有很多种,从最早的Iterator,到java5支持的foreach,再到java8的Lambda。下面我们就来看看具体的用法以及各自的优缺点。
首先初始化一张地图
公共类测试映射{
公共静态Mapmap=new HashMap();
}键设置值
如果只需要map的key或者value,那么使用map的keySet或者values方法无疑是最方便的。
//KeySet 获取密钥
公共无效测试密钥集(){
for (整数键: map.keySet()) {
System.out.println(key);
}
}
//values获取值
公共无效测试值(){
for (整数值: map.values()) {
System.out.println(值);
}
}键集获取(键)
如果需要同时获取key和value,可以先获取key,然后通过map的get(key)获取value
需要注意的是,这种方法并不是最优选择,一般不推荐。
//keySet get(key) 获取键和值
公共无效testKeySetAndGetKey(){
for (整数键: map.keySet()) {
System.out.println(key + ":" + map.get(key));
}
}条目集
通过遍历map的entrySet,还可以同时获取key和value。总体来说,性能比前一种要好。这也是最常用的遍历方法。
//entrySet获取key和value
公共无效测试条目(){
for (Map.Entryentry : map.entrySet()) {
System.out.println(entry.getKey()+":"+entry.getValue());
}
}迭代器
对于上述类型的foreach,可以使用Iterator代替。事实上,foreach只在java5中支持。 foreach的写法看起来更加简洁。
但Iterator也有它的优点:使用foreach遍历map时,如果改变其大小,会报错,但如果只是删除元素,可以使用Iterator的remove方法来删除元素。
//迭代器entrySet获取key和value
公共无效测试迭代器(){
Iteratorit=map.entrySet().iterator();
while (it.hasNext()) {
Map.Entryentry=it.next();
System.out.println(entry.getKey()+":"+entry.getValue());
//it.remove();删除元素
}
}拉姆达
Java8提供了Lambda表达式支持。语法看起来比较简单,可以同时获取key和value。但经过测试,性能比entrySet低,所以更推荐entrySet方法。
//Lambda 获取键和值
公共无效测试Lambda(){
map.forEach((键, 值) -{
System.out.println(key + ":" + value);
});
}简单的性能测试
我用10万条数据做了一个简单的性能测试。数据类型为Integer,map实现选择HashMap。
静止的{
for (int i=0; i 100000; i++) {
地图.put(i, 1);
}
}测试结果如下:
按键组:392
值:320
密钥集获取(密钥):552
条目集:465
条目集迭代器:508
Lambda: 536 需要注意的是,map中存储的数据类型、map的大小以及map的不同实现方式都会影响遍历的性能,因此测试结果仅供参考。
总结
如果只想获取key或value,建议使用keySet或values方法。
如果同时需要key和value,建议使用entrySet。
如果遍历时需要删除元素,建议使用Iterator
【高效遍历Map对象的四大策略揭秘】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
终于找到一篇讲遍历Map的文章了!以前总是感觉不太习惯使用它。
有14位网友表示赞同!
这篇文章要比我原来看的那本资料简单明了太多了,很好理解!
有15位网友表示赞同!
看来我需要学习一下这些遍历的方法了,说不定能帮我提高效率。
有7位网友表示赞同!
哪种遍历方法最好用呢?这篇文章会不会有比较呢?
有6位网友表示赞同!
希望这几种方法都能方便应用于我的项目中!
有17位网友表示赞同!
之前一直是用for循环遍历Map,看来可以用其他的方法效率更高啊!
有18位网友表示赞同!
看了标题我就有点兴奋了,我正想研究一下Map的遍历方式呢!
有18位网友表示赞同!
这种遍历方法有什么优缺点吗?
有9位网友表示赞同!
感觉代码还挺容易理解,我会找个例子自己实践一下。
有16位网友表示赞同!
学习新技术总是要循序渐进的,这篇博客很有帮助。
有6位网友表示赞同!
原来可以这样遍历Map,太妙了!
有11位网友表示赞同!
我已经学会了两种方法,这篇文章是不是会告诉我更高级的方法?
有7位网友表示赞同!
收藏一下,下次正好可以用到。
有5位网友表示赞同!
这些遍历方法适用于所有场景吗,还是有特定情况的时候比较适合使用?
有20位网友表示赞同!
学习完之后我会试试把代码应用到我的项目中去!
有15位网友表示赞同!
Map这种数据结构真的很好用,特别是有了这几种遍历方式!
有11位网友表示赞同!
以后做程序的时候可以多尝试这些Map的遍历方法了!
有16位网友表示赞同!
这篇文章写的很详细,我感觉很容易懂。
有10位网友表示赞同!
希望还有更多关于Map的文章分享出来!
有17位网友表示赞同!