`

Java遍历Map对象

    博客分类:
  • java
 
阅读更多
在Java中如何遍历Map对象
How to Iterate Over a Map in Java

在java中遍历Map有不少的方法。我们看一下最常用的方法及其优缺点。

既然java中的所有map都实现了Map接口,以下方法适用于任何map实现(HashMap, TreeMap, LinkedHashMap, Hashtable, 等等)



方法一 在for-each循环中使用entries来遍历

这是最常见的并且在大多数情况下也是最可取的遍历方式。在键值都需要时使用。

[java] view plain copy
Map<Integer, Integer> map = new HashMap<Integer, Integer>(); 
 
for (Map.Entry<Integer, Integer> 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。

[java] view plain copy
Map<Integer, Integer> map = new HashMap<Integer, Integer>(); 
 
//遍历map中的键 
 
for (Integer key : map.keySet()) { 
 
    System.out.println("Key = " + key); 
 

 
//遍历map中的值 
 
for (Integer value : map.values()) { 
 
    System.out.println("Value = " + value); 
 



该方法比entrySet遍历在性能上稍好(快了10%),而且代码更加干净。



方法三使用Iterator遍历

使用泛型:

[java] view plain copy
Map<Integer, Integer> map = new HashMap<Integer, Integer>(); 
 
Iterator<Map.Entry<Integer, Integer>> entries = map.entrySet().iterator(); 
 
while (entries.hasNext()) { 
 
    Map.Entry<Integer, Integer> entry = entries.next(); 
 
    System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); 
 



不使用泛型:

[java] view plain copy
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); 
 



你也可以在keySet和values上应用同样的方法。

该种方式看起来冗余却有其优点所在。首先,在老版本java中这是惟一遍历map的方式。另一个好处是,你可以在遍历时调用iterator.remove()来删除entries,另两个方法则不能。根据javadoc的说明,如果在for-each遍历中尝试使用此方法,结果是不可预测的。

从性能方面看,该方法类同于for-each遍历(即方法二)的性能。



方法四、通过键找值遍历(效率低)

[java] view plain copy
Map<Integer, Integer> map = new HashMap<Integer, Integer>(); 
 
for (Integer key : map.keySet()) { 
 
    Integer value = map.get(key); 
 
    System.out.println("Key = " + key + ", Value = " + value); 
 



作为方法一的替代,这个代码看上去更加干净;但实际上它相当慢且无效率。因为从键取值是耗时的操作(与方法一相比,在不同的Map实现中该方法慢了20%~200%)。如果你安装了FindBugs,它会做出检查并警告你关于哪些是低效率的遍历。所以尽量避免使用。



总结

如果仅需要键(keys)或值(values)使用方法二。如果你使用的语言版本低于java 5,或是打算在遍历时删除entries,必须使用方法三。否则使用方法一(键值都要)。
分享到:
评论

相关推荐

    java遍历Map对象的说有数据

    &lt;FONT color=#0000ff&gt;//方法一: 用entrySet() Iterator it = emails.entrySet().iterator();... Map.Entry m=(Map.Entry)it.next(); logger.info("email-" + m.getKey() + ":" + m.getValue()); }

    Java遍历Map对象的四种方式

    如果只需要遍历Map的键或值,可以选择这种方式。通过`map.keySet()`获取键集合,或者`map.values()`获取值集合,再进行for-each循环。在性能上,这种方式略优于`entrySet()`,代码也更为简洁。 ```java // 遍历键 ...

    JAVA遍历Map所有元素.doc

    遍历Map的所有元素是常见的操作,特别是在处理数据或者进行调试时。本文将详细讲解两种主要的遍历Map元素的方法,并分析它们的效率差异。 ### 方法一:通过`entrySet()`遍历 这是推荐的遍历Map元素的方式,因为它...

    java遍历Map的几种方法分析

    在Java编程中,Map接口是用于存储键值对的数据结构,它提供了多种遍历Map的方法。本篇文章将详细分析Java中遍历Map的四种常见方法,帮助开发者更好地理解和运用这些技巧。 1. **for-each循环遍历** Java 5引入了...

    Java中如何遍历Map对象的4种方法_.docx

    在 Java 中,遍历 Map 对象是常见的操作,因为我们需要访问和处理存储的键值对。以下是四种遍历 Map 的方法: 1. **使用 for-each 循环遍历 entries** 这是最简单且推荐的遍历方式,适用于需要同时访问键和值的...

    Java Map 遍历实例与效率比较

    主要提供java中的map的遍历实例及效率比较

    java 遍历MAP的几种方法示例代码

    以下是Java中遍历Map的几种常见方法,包括使用增强的for循环、迭代器以及通过keySet()和entrySet()方法: 1. **增强的for循环(foreach)** 增强的for循环是Java 5引入的新特性,它可以简洁地遍历集合。对于Map,...

    java集合map取key使用示例 java遍历map

    本篇文章将详细讲解如何在Java中遍历Map并获取其键(key)。 1. **Map接口概述** Map接口在Java集合框架中定义了存储键值对的方法。每个键都是唯一的,通过键可以访问对应的值。Map接口没有实现List或Set接口,...

    java 遍历Map及Map转化为二维数组的实例

    "java 遍历Map及Map转化为二维数组的实例" 在 Java 编程语言中,遍历 Map 及将其转化为二维数组是一种常见的操作。本文将详细介绍如何使用 Java 遍历 Map 及将其转化为二维数组,并提供实例代码以供参考。 1. 使用...

    java中Map集合的常用遍历方法及HashMap的应用实例

    1、遍历Map.entrySet():它的每一个元素都是Map.Entry对象,这个对象中, 放着的就是Map中的某一对key-value; 2、遍历Map.keySet():它是Map中key值的集合,我们可以通过遍历这个集合来 读取Map中的元素; 3、...

    在jsp中使用JSTL跟El表达式访问和遍历Map集合

    在JSP中,如果你有一个Map对象存储在请求或页面作用域中,例如: ```java Map, String&gt; myMap = new HashMap(); myMap.put("key1", "value1"); myMap.put("key2", "value2"); request.setAttribute("myMap", myMap)...

    Map最常规的两种遍历方法

    两种方法都可以用于遍历Map集合,但是它们之间有一些区别。在实际开发中,我们可以根据实际情况选择合适的遍历方法。 优点和缺点 使用values()方法和Iterator迭代器的优点: * 该方法能够快速地遍历Map集合中的...

    计算机遍历Map集合.pdf

    2. **遍历Map集合(值是对象)**:当Map的值是自定义对象时,可以通过EL表达式直接访问对象的属性。 ```jsp ${map}" var="m"&gt; ${m.key} ${m.value.name} &lt;!-- 假设Person对象有name属性 --&gt; ``` 另外,Struts框架...

    java遍历大容量map的正确方法.pdf

    以下是对标题和描述中提及的四种遍历Map方法的详细说明: 1. **通过Map.keySet遍历key和value** 这种方法是最直观的,直接获取Map的keySet并进行迭代。代码简洁,但存在效率问题。在遍历过程中,每次获取value都...

    java Map遍历方法

    这篇博文主要探讨了如何遍历Java中的`Map`对象,下面将详细介绍几种常见的遍历`Map`的方法。 1. **迭代器法**: Java提供了`Map`接口的`entrySet()`方法,返回一个包含`Map`中所有键值对的`Set`视图。通过这个`Set...

    java实现遍历Map的方法

    在这种方法中,我们直接遍历Map的entrySet(),这样每次循环得到的是一个Map.Entry对象,包含了键值对的所有信息: ```java import java.util.HashMap; import java.util.Map; public class TestMap { public ...

    Java四种遍历Map的方法

    Java四种遍历Map的方法 Java语言中,Map是一种常用的数据结构,用于存储键值对形式的数据。遍历Map是指从Map中提取键值对的过程。本文将介绍四种遍历Map的方法,分别是通过键值遍历、通过值遍历、通过EntrySet遍历...

    FreeMarker 遍历list

    3. **遍历Map**:使用`&lt;#list&gt;`指令,我们遍历`dataList`中的每一个Map对象,然后再次使用`&lt;#list&gt;`遍历Map中的每一个键值对。 4. **输出结果**:`${key}`和`${value}`分别代表Map中的键和对应的值,它们会被替换为...

    Struts2 iterator 标签遍历 Map,List,数组(三十六)

    首先,我们来看如何使用`iterator`标签遍历Map。在Java中,Map是一种键值对的数据结构,`iterator`标签可以通过`key`和`value`属性分别获取键和值。例如: ```jsp ... &lt;td&gt;&lt;s:property value="key" /&gt; &lt;td&gt;&lt;s...

    struts2中的map遍历

    在Struts2中,我们可以使用OGNL(Object-Graph Navigation Language)表达式语言来遍历Map。 在Struts2中,Map遍历通常在JSP页面上进行,使用OGNL表达式。以下是一个简单的例子: ```jsp ... &lt;s:iterator value="...

Global site tag (gtag.js) - Google Analytics