`

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对象的说有数据

    ### Java遍历Map对象的所有数据 在Java编程中,`Map`接口是Java集合框架中的一个关键组成部分,它用于存储键值对。本篇文章将详细解释如何遍历`Map`对象的所有数据,并介绍几种常见的遍历方法。我们将重点讨论通过`...

    java-遍历map

    ### 二、使用keySet遍历Map `Map`提供了一个`keySet()`方法,该方法返回`Map`中所有键的集合视图。通过这个方法,我们可以获取到一个包含所有键的`Set`集合,然后使用迭代器(`Iterator`)或增强型for循环(foreach...

    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遍历JSON树

    ### Java遍历JSON树知识点详解 #### 一、前言 在处理Web应用程序中的数据时,JSON(JavaScript Object Notation)是一种非常常见的数据格式。它轻量级且易于读写,因此广泛应用于前后端的数据交互中。对于Java...

    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键、值和获取Map大小的方法示例

    总结一下,Java中遍历Map主要有两种方法:通过`keySet()`遍历键并获取值,或通过`entrySet()`直接遍历键值对。获取Map大小则简单地调用`size()`方法即可。这些基本操作对于理解和使用Map数据结构至关重要,无论是在...

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

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

    js遍历map javaScript遍历map的简单实现

    在JavaScript中,遍历Map对象通常有两种主要的方法:使用`for...of`循环和使用`Map.prototype.forEach()`方法。 首先,让我们来看看在给定的描述中展示的简单实现: ```javascript var map = { "name": "华仔", ...

    java中Map的两种遍历方法

    接下来,使用`Iterator`迭代器遍历这些映射关系,并直接从`Map.Entry`对象中获取键和值,最后输出键值对。 ### 总结与对比 通过以上分析,我们可以看到,无论是通过`keySet()`还是`entrySet()`遍历`Map`,都能有效...

    在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集合.pdf

    本文主要讲解了在Java中如何遍历Map集合,这是在日常编程中经常遇到的一个操作,特别是在需要处理键值对数据时。以下将详细介绍Map集合的遍历方法以及一些相关的知识点。 首先,Map是Java集合框架中的一个接口,它...

    Java Map 遍历比较齐全的解析.docx

    3. **Java 8及Lambda表达式遍历Map** 自Java 8开始,引入了Lambda表达式,使得遍历`Map`更加简洁。 ```java map.keySet().forEach(key -&gt; System.out.println("map.get(" + key + ") = " + map.get(key))); ``` ...

    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框架...

Global site tag (gtag.js) - Google Analytics