java Map 怎么遍历
关于java中遍历map具体有四种方式,请看下文详解。1、这是最常见的并且在大多数情况下也是最可取的遍历方式,在键值都需要时使用。Map map = new HashMap();for (Map.Entry entry : map.entrySet()) {System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());}2、在for-each循环中遍历keys或values。如果只需要map中的键或者值,你可以通过keySet或values来实现遍历,而不是用entrySet。Map map = new HashMap();for (Integer key : map.keySet()) {System.out.println("Key = " + key);}for (Integer value : map.values()) {System.out.println("Value = " + value);}该方法比entrySet遍历在性能上稍好(快了10%),而且代码更加干净。3、使用Iterator遍历使用泛型:Map map = new HashMap();Iterator> entries = map.entrySet().iterator();while (entries.hasNext()) {Map.Entry entry = entries.next();System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());}不使用泛型:Map map = new HashMap();Iterator entries = map.entrySet().iterator();while (entries.hasNext()) {Map.Entry entry = (Map.Entry) entries.next();Integer key = (Integer)entry.getKey();Integer value = (Integer)entry.getValue();System.out.println("Key = " + key + ", Value = " + value);}4、通过键找值遍历(效率低)Map map = new HashMap();for (Integer key : map.keySet()) {Integer value = map.get(key);System.out.println("Key = " + key + ", Value = " + value);}假设Map中的键值对为1=>11,2=>22,3=>33,现用方法1来遍历Map代码和调试结果如下:扩展资料:1、HashMap的重要参数HashMap 的实例有两个参数影响其性能:初始容量 和加载因子。容量是哈希表中桶的数量,初始容量只是哈希表在创建时的容量。加载因子 是哈希表在其容量自动增加之前可以达到多满的一种尺度。当哈希表中的条目数超出了加载因子与当前容量的乘积时,则要对该哈希表进行 rehash 操作(即重建内部数据结构),从而哈希表将具有大约两倍的桶数。在Java编程语言中,加载因子默认值为0.75,默认哈希表元为101。2、HashMap的同步机制注意,此实现不是同步的。 如果多个线程同时访问一个哈希映射,而其中至少一个线程从结构上修改了该映射,则它必须保持外部同步。(结构上的修改是指添加或删除一个或多个映射关系的任何操作;以防止对映射进行意外的非同步访问,如下:Map m = Collections.synchronizedMap(new HashMap(...));参考资料:百度百科-Hashmap
如何高效的遍历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的常用遍历方法
方法一 在for-each循环中使用entries来遍历
这是最常见的并且在大多数情况下也是最可取的遍历方式。在键值都需要时使用。
Map map = new HashMap();
for (Map.Entry entry : map.entrySet()) {
System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
}
注意:for-each循环在java 5中被引入所以该方法只能应用于java 5或更高的版本中。如果你遍历的是一个空的map对象,for-each循环将抛出NullPointerException,因此在遍历前你总是应该检查空引用。
方法二 在for-each循环中遍历keys或values。
如果只需要map中的键或者值,你可以通过keySet或values来实现遍历,而不是用entrySet。
Map map = new HashMap();
//遍历map中的键
for (Integer key : map.keySet()) {
System.out.println("Key = " + key);
}
//遍历map中的值
for (Integer value : map.values()) {
System.out.println("Value = " + value);
}
该方法比entrySet遍历在性能上稍好
方法三使用Iterator遍历
使用泛型:
Map map = new HashMap();
Iterator> entries = map.entrySet().iterator();
while (entries.hasNext()) {
Map.Entry entry = entries.next();
System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
}
不使用泛型:
Map map = new HashMap();
Iterator entries = map.entrySet().iterator();
while (entries.hasNext()) {
Map.Entry entry = (Map.Entry) entries.next();
Integer key = (Integer)entry.getKey();
Integer value = (Integer)entry.getValue();
System.out.println("Key = " + key + ", Value = " + value);
}
方法四、通过键找值遍历(效率低)
Map map = new HashMap();
for (Integer key : map.keySet()) {
Integer value = map.get(key);
System.out.println("Key = " + key + ", Value = " + value);
}
总结
如果仅需要键(keys)或值(values)使用方法二。
如果你使用的语言版本低于java 5,或是打算在遍历时删除entries,必须使用方法三。
否则使用方法一(键值都要)。