欢迎来真孝善网,为您提供真孝善正能量书籍故事!

高效遍历Map对象的四大策略揭秘

时间:11-09 名人轶事 提交错误

大家好,关于高效遍历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的文章了!以前总是感觉不太习惯使用它。

    有14位网友表示赞同!

咆哮

这篇文章要比我原来看的那本资料简单明了太多了,很好理解!

    有15位网友表示赞同!

江山策

看来我需要学习一下这些遍历的方法了,说不定能帮我提高效率。

    有7位网友表示赞同!

妄灸

哪种遍历方法最好用呢?这篇文章会不会有比较呢?

    有6位网友表示赞同!

落花忆梦

希望这几种方法都能方便应用于我的项目中!

    有17位网友表示赞同!

执念,爱

之前一直是用for循环遍历Map,看来可以用其他的方法效率更高啊!

    有18位网友表示赞同!

非想

看了标题我就有点兴奋了,我正想研究一下Map的遍历方式呢!

    有18位网友表示赞同!

早不爱了

这种遍历方法有什么优缺点吗?

    有9位网友表示赞同!

╯念抹浅笑

感觉代码还挺容易理解,我会找个例子自己实践一下。

    有16位网友表示赞同!

爱情的过失

学习新技术总是要循序渐进的,这篇博客很有帮助。

    有6位网友表示赞同!

何必锁我心

原来可以这样遍历Map,太妙了!

    有11位网友表示赞同!

丢了爱情i

我已经学会了两种方法,这篇文章是不是会告诉我更高级的方法?

    有7位网友表示赞同!

龙吟凤

收藏一下,下次正好可以用到。

    有5位网友表示赞同!

七夏i

这些遍历方法适用于所有场景吗,还是有特定情况的时候比较适合使用?

    有20位网友表示赞同!

红玫瑰。

学习完之后我会试试把代码应用到我的项目中去!

    有15位网友表示赞同!

有一种中毒叫上瘾成咆哮i

Map这种数据结构真的很好用,特别是有了这几种遍历方式!

    有11位网友表示赞同!

别伤我i

以后做程序的时候可以多尝试这些Map的遍历方法了!

    有16位网友表示赞同!

神经兮兮°

这篇文章写的很详细,我感觉很容易懂。

    有10位网友表示赞同!

空巷

希望还有更多关于Map的文章分享出来!

    有17位网友表示赞同!

【高效遍历Map对象的四大策略揭秘】相关文章:

1.蛤蟆讨媳妇【哈尼族民间故事】

2.米颠拜石

3.王羲之临池学书

4.清代敢于创新的“浓墨宰相”——刘墉

5.“巧取豪夺”的由来--米芾逸事

6.荒唐洁癖 惜砚如身(米芾逸事)

7.拜石为兄--米芾逸事

8.郑板桥轶事十则

9.王献之被公主抢亲后的悲惨人生

10.史上真实张三丰:在棺材中竟神奇复活