Java遍历Map的各种方法

HashMap 遍历从大的方向来说,可分为以下 4 类

  1. 迭代器(Iterator)方式遍历
  2. For Each 方式遍历
  3. Lambda 表达式遍历(jdk 1.8+)
  4. Streams API 遍历(jdk 1.8+)

但每种类型下又有不同的实现方式,接下来我们来看每种遍历方式的具体实现代码。

public class BaseTest {

	public static void main(String[] args) {

		Map params = Maps.newHashMap();
		params.put("1", "val1");
		params.put("2", "val2");
		params.put("3", "val2");

		//第一种【推荐】
		for (String key : params.keySet()) {
			System.out.println("key= "+ key + " and val= " + params.get(key));
		}

		//第二种【推荐】
		Iterator> it = params.entrySet().iterator();
		while (it.hasNext()) {
			Map.Entry entry = it.next();
			System.out.println("key= " + entry.getKey() + " and val= " + entry.getValue());
		}

		//第三种【推荐】
		for (Map.Entry entry : params.entrySet()) {
			System.out.println("key= " + entry.getKey() + " and val= " + entry.getValue());
		}

		//第四种【不推荐】
		for (String key : params.keySet()) {
			System.out.println("value= " + key);
		}
		for (String v : params.values()) {
			System.out.println("value= " + v);
		}

		//第五种:lambda 【不推荐】
		params.forEach((k,v)->{
			System.out.println("key= " + k + " and value= " +v);
		});

		//第六种:Streams API 单线程【推荐】
		params.entrySet().stream().forEach((entry) -> {
			System.out.println("key= " + entry.getKey() + " and val= " + entry.getValue());
		});

		//第六种:Streams API 多线程【推荐】
		params.entrySet().parallelStream().forEach((entry) -> {
			System.out.println("key= " + entry.getKey() + " and val= " + entry.getValue());
		});

	}

}

如果大家有时间可以针对每种方式进行性能测试:

使用 Oracle 官方提供的性能测试工具 JMH(Java Microbenchmark Harness)

首先,我们先要引入 JMH 框架,在 pom.xml 文件中添加如下配置:



    org.openjdk.jmh
    jmh-core
    1.23



    org.openjdk.jmh
    jmh-generator-annprocess
    1.23
    provided
@BenchmarkMode(Mode.AverageTime) // 测试完成时间
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@Warmup(iterations = 2, time = 1, timeUnit = TimeUnit.SECONDS)      // 预热 2 轮,每次 1s
@Measurement(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS) // 测试 5 轮,每次 3s
@Fork(1)                 // fork 1 个线程
@State(Scope.Thread)     // 每个测试线程一个实例
public class HashMapIndexTest {

    static Map params= new HashMap() {{
        // 添加数据
        for (int i = 0; i < 100; i++) {
            put(i, "val" + i);
        }
    }};

    public static void main(String[] args) throws RunnerException {
        // 启动基准测试
        Options opt = new OptionsBuilder()
                .include(HashMapCycle.class.getSimpleName()) // 要导入的测试类
                .output("D:\\jmh_map.log")                   // 输出测试结果的文件
                .build();
        new Runner(opt).run();                  
    }

    @Benchmark
    public void keySet() {
       	for (String key : params.keySet()) {
			System.out.println("key= "+ key + " and val= " + params.get(key));
		}
    }

    ....依次编写

}

你可能感兴趣的:(Java,Java基础,java,开发语言)