`
huwen_hua
  • 浏览: 5048 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Java 遍历Map的方法

 
阅读更多

在Java中有多种遍历HashMAp的方法。让我们回顾一下最常见的方法和它们各自的优缺点。由于所有的Map都实现了Map接口,所以接下来方法适用于所有Map(如:HaspMap,TreeMap,LinkedMap,HashTable,etc)

方法#1 使用For-Each迭代entries

这是最常见的方法,并在大多数情况下更可取的。当你在循环中需要使用Map的键和值时,就可以使用这个方法

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循环是Java5新引入的,所以只能在Java5以上的版本中使用。如果你遍历的map是null的话,For-Each循环会抛出NullPointerException异常,所以在遍历之前你应该判断是否为空引用。

方法#2 使用For-Each迭代keys和values

如果你只需要用到map的keys或values时,你可以遍历KeySet或者values代替entrySet

Map<Integer, Integer> map = new HashMap<Integer, Integer>();

//iterating over keys only
for (Integer key : map.keySet()) {
    System.out.println("Key = " + key);
}

//iterating over values only
for (Integer value : map.values()) {
    System.out.println("Value = " + value);
}

这个方法比entrySet迭代具有轻微的性能优势(大约快10%)并且代码更简洁

方法#3 使用Iterator迭代

使用泛型

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());
}

不使用泛型

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的唯一方法。另外一个重要的特性是可以让你在迭代的时候从map中删除entries的(通过调用iterator.remover())唯一方法.如果你试图在For-Each迭代的时候删除entries,你将会得到unpredictable resultes 异常。

从性能方法看,这个方法等价于使用For-Each迭代

方法#4 迭代keys并搜索values(低效的)

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);
}

这个方法看上去比方法#1更简洁,但是实际上它更慢更低效,通过key得到value值更耗时(这个方法在所有实现map接口的map中比方法#1慢20%-200%)。如果你安装了FindBugs,它将检测并警告你这是一个低效的迭代。这个方法应该避免

总结

如果你只需要使用key或者value使用方法#2,如果你坚持使用java的老版本(java 5 以前的版本)或者打算在迭代的时候移除entries,使用方法#3。其他情况请使用#1方法。避免使用#4方法。

stackoverflow链接:http://stackoverflow.com/questions/1066589/iterate-through-a-hashmap

分享到:
评论

相关推荐

    java-遍历map

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

    遍历MAP的几种方法

    遍历MAP的几种方法,利用keyset进行遍历,它的优点在于可以根据你所想要的key值得到你想要的 values,更具灵活性

    JAVA遍历Map所有元素.doc

    本文将详细讲解两种主要的遍历Map元素的方法,并分析它们的效率差异。 ### 方法一:通过`entrySet()`遍历 这是推荐的遍历Map元素的方式,因为它具有较高的效率。通过调用`Map.entrySet()`方法,我们可以获取到Map...

    java遍历Map的几种方法分析

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

    java遍历Map对象的说有数据

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

    java Map 遍历方法

    #### 一、使用Iterator遍历Map 1. **通过`entrySet()`获取迭代器** 使用`Map.entrySet()`方法可以返回`Map`中所有映射关系的`Set`视图,然后可以通过迭代这个`Set`来遍历整个`Map`。 ```java Map, String&gt; ...

    另一种遍历Map的方式

    Map是一种常用的数据结构,在Java中有多种遍历Map的方式。今天,我们来讨论一种遍历Map的方式,即使用Map.Entry和Map.entrySet()。 Map.Entry是什么? ---------------- Map.Entry是一个接口,表示一个映射项,...

    java遍历JSON树

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

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

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

    java中Map的两种遍历方法

    本文将详细探讨在Java中遍历`Map`的两种常用方法:通过`keySet()`方法和通过`entrySet()`方法。 ### 一、通过`keySet()`方法遍历`Map` #### 方法概述 `keySet()`方法返回一个包含`Map`中所有键的`Set`视图。通过...

    map遍历的四种方法

    ### Map遍历的四种方法 在Java编程语言中,`Map`是一种常用的数据结构,用于存储键值对。为了能够有效地处理和操作这些键值对数据,熟练掌握遍历`Map`的方法至关重要。本文将详细介绍四种不同的遍历`Map`的方式,并...

    Java Map 遍历实例与效率比较

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

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

    在Java编程中,集合框架是处理数据的重要...总之,Java中遍历Map有多种方法,具体选择取决于你的需求。使用`entrySet()`、`keySet()`或`values()`,配合迭代器或增强的for循环,都可以方便地访问和操作Map中的键值对。

    Map最常规的两种遍历方法

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

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

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

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

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

    java Map遍历方法

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

    java集合MAP三种遍历

    本文将详细介绍Java中Map集合的三种遍历方法及其应用场景、优缺点等,帮助读者更好地理解和掌握Map的使用技巧。 ### 一、Map简介 `Map`接口是Java集合框架的一部分,它提供了基于键值对的数据存储方式。常见的实现...

    JAVA遍历map的几种实现方法代码

    以下将详细介绍标题和描述中提到的几种遍历Map的Java实现方法,并讨论它们的效率问题。 1. **keySet遍历** 使用`keySet()`方法获取Map的所有键,然后通过迭代器或者增强for循环遍历键。这种方法只遍历键,如果需要...

Global site tag (gtag.js) - Google Analytics