您当前的位置:首页 > 互联网教程

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

发布时间:2025-05-19 12:13:16    发布人:远客网络

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

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

如文章标题所言,遍历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的程序员,下期见。

二、Java中怎么遍历map中value值

1、通过Map.entrySet遍历key和value,在for-each循环中使用entries来遍历.推荐,尤其是容量大时。

2、通过Map.keySet遍历key,通过键找值value遍历(效率低),普遍使用,二次取值。

3、如果只需要map中的键或者值,你可以通过Map.keySet或Map.values来实现遍历,而不是用entrySet。在for-each循环中遍历keys或values。

4、通过Map.entrySet使用iterator遍历key和value。

1、list和set集合都实现了Iterable接口,所以他们的实现类可以使用迭代器遍历,map集合未实现该接口,若要使用迭代器循环遍历,需要借助set集合。

2、使用EntrySet遍历,效率更高。

三、java中什么叫entryset

1、Java中的entrySet()是指Map接口中的一个方法,它返回一个Set视图,其中包含Map中的所有映射关系。

2、在Java中,Map是一种存储键值对的数据结构,每个键都唯一对应一个值。entrySet()方法提供了一种方便的方式来遍历Map中的所有键值对。它返回的Set视图中的每个元素都是一个Map.Entry对象,这个对象包含了键和值两个信息。通过遍历这个Set视图,我们可以同时访问到Map中的键和值。

3、使用entrySet()方法遍历Map比使用keySet()和get()方法遍历Map更加高效,因为entrySet()方法只需要遍历一次Map,而使用keySet()和get()方法则需要遍历两次Map(一次遍历键,一次遍历值)。此外,使用entrySet()方法还可以避免在遍历过程中由于Map的修改而导致的并发修改异常。

4、以下是一个使用entrySet()方法遍历Map的示例代码:

5、public static void main(String[] args){

6、Map map= new HashMap<>();

7、Set> entrySet= map.entrySet();

8、for(Map.Entry entry: entrySet){

9、Integer value= entry.getValue();

10、System.out.println("Key:"+ key+", Value:"+ value);

11、在这个示例中,我们首先创建了一个HashMap对象,并向其中添加了三个键值对。然后,我们调用entrySet()方法获取到Map中的所有键值对,并将其存储在一个Set视图中。最后,我们遍历这个Set视图,并通过Map.Entry对象的getKey()和getValue()方法分别获取到键和值,并将其打印出来。