云计算、AI、云原生、大数据等一站式技术学习平台

网站首页 > 教程文章 正文

Java中遍历HashMap的方法

jxf315 2025-04-27 14:24:02 教程文章 9 ℃

技术背景

在Java编程中,HashMap 是一种常用的数据结构,用于存储键值对。当我们需要处理 HashMap 中的元素时,就需要对其进行遍历。了解不同的遍历方法及其优缺点,有助于我们根据具体需求选择最合适的方式,提高代码的性能和可读性。

实现步骤

方法一:使用For - Each循环遍历键值对(entrySet)

这是最常用的方法,适用于需要同时获取键和值的场景。

import java.util.HashMap;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        Map<Integer, Integer> map = new HashMap<>();
        map.put(1, 100);
        map.put(2, 200);
        for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
            System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
        }
    }
}

方法二:使用For - Each循环遍历键或值

如果只需要键或值,可以分别使用 keySet()values() 方法。

import java.util.HashMap;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        Map<Integer, Integer> map = new HashMap<>();
        map.put(1, 100);
        map.put(2, 200);
        // 遍历键
        for (Integer key : map.keySet()) {
            System.out.println("Key = " + key);
        }
        // 遍历值
        for (Integer value : map.values()) {
            System.out.println("Value = " + value);
        }
    }
}

方法三:使用迭代器(Iterator)遍历

在旧版本的Java中,或者需要在遍历过程中删除元素时,可使用此方法。

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        Map<Integer, Integer> map = new HashMap<>();
        map.put(1, 100);
        map.put(2, 200);
        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());
        }
    }
}

方法四:遍历键并通过键获取值(不推荐)

此方法虽然代码简洁,但性能较差,不建议使用。

import java.util.HashMap;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        Map<Integer, Integer> map = new HashMap<>();
        map.put(1, 100);
        map.put(2, 200);
        for (Integer key : map.keySet()) {
            Integer value = map.get(key);
            System.out.println("Key = " + key + ", Value = " + value);
        }
    }
}

最佳实践

  • 如果只需要键或值,使用方法二,能获得更好的性能和更简洁的代码。
  • 如果需要同时获取键和值,且不需要在遍历过程中删除元素,优先使用方法一。
  • 如果使用的是旧版本的Java(Java 5之前),或者需要在遍历过程中删除元素,使用方法三。
  • 避免使用方法四,因为它的性能较低。

常见问题

1. ConcurrentModificationException异常

在使用For - Each循环遍历 HashMap 时,如果在遍历过程中修改了 HashMap 的结构(如删除元素),会抛出
ConcurrentModificationException
异常。解决方法是使用迭代器的 remove() 方法(方法三)。

2. NullPointerException异常

在使用For - Each循环遍历 HashMap 时,如果 HashMapnull,会抛出 NullPointerException 异常。因此,在遍历之前应先检查 HashMap 是否为 null

import java.util.HashMap;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        Map<Integer, Integer> map = null;
        if (map != null) {
            for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
                System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
            }
        }
    }
}

Tags:

最近发表
标签列表