如何高效的遍历Map?你常用的不一定是最快的

 我来答
新科技17
2022-06-19 · TA获得超过5838个赞
知道小有建树答主
回答量:355
采纳率:100%
帮助的人:72.2万
展开全部

如文章标题所言,遍历Map是开发过程中比较常见的行为,实现的方式也有多种方式,本文带领大家一起看看更加高效的遍历 Map 。

首先一起来看看,有哪些遍历 Map 的方式

这种应该算是比较常见的使用方式,也是比较容易理解的

keySet : 获取 map 中所有的 key ,然后依次遍历每个 key 。

这种是我平时开发中用的最多的方式,简单通俗易懂。

但是其性能如何呢?后续待揭秘。

不知道有多少人用过 Java8 中的 parallel模式,本质是一种并行处理方式。

性能如何?稍后揭晓。

不行就找找外援试试?

测试环境如下:Intel i7-4790 3.60 GHz, 16 GB

测试集为小的Map集合(大约100个元素),各个方法耗时如下:

从结果看出,在数据量比较小时, 利用 Java 8中的foreach 暂时领先。

测试集为元素数据量 1000 的 Map 集合,测试结果如下:

从结果集合看,在中等数据量情况下,外援 Eclipse (CS) collections 中的 MutableMap 表现最为优异,勇得第一。

其次为 Java 8 中的 foreach ,位列第二。

测试集为元素数据量 100000 (十万级别) 的 Map 集合,测试结果如下:

利用 iterator 和 Map.Entry 【方法1】稳居第一,领先 第二名差不多7s。

第二名为 Eclipse (CS) collections 中的 MutableMap 位列第二,在大数据量下表现表现比较出色。

指的注意的是之前在小数据量下表现比较出色的 Java 8 中的 foreach ,排名却比较靠后,但是仍然超过了利用 Java8 的 Stream API 。

其中还有另一个现象:利用并行模式计算的 Java8 中的 Stream API parallel ,在大数据量时表现好于 foreach 和 stream api 。

下表为不同数据量情况下的各个方法性能表现

在平时开发中,数据量都不算太大时,剖除外援而言, Java 8 中的 foreach 【方法3】,表现比较优异。而并行运算的 Stream API parallel 【方法8】表现没有想象中好, Stream API 【方法7】表现中规中矩。

主要罗列了多种遍历 Map 的方式,每个实现方式都有各自的特点,有的人喜欢 foreach 的通俗易懂;有的人喜欢 stream 的干净利落。

如果从性能来看,小数据量情况下:优先推荐使用 Java8 Foreach 【方法3】。

大数据量情况下推荐 使用 iterator 和 Map.Entry 【方法1】。

我是大黄,一个只会写 HelloWorld 的程序员,下期见。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式