HashMap(一)——遍历方式

学习笔记——HashMap

简介

在我们的开发过程中,经常在处理数据的时候,都会遇到遍历集合的情况,其中HashMap遍历会经常遇到,这里我结合所看到的资料,总结一下HashMap的遍历方式。
HashMap的遍历方式主要可以分为这几类

  • 首先是迭代器(Iterator),这是也是最常用的方式;

迭代器中有两种遍历方式:EntrySet 和KeySet

  • foreach遍历方式

foreach也有两种遍历方式:EntrySet 和KeySet

  • Stream API方法
  • Lambda 表达式——JDK8推荐

这里补充一下,在《阿里Java开发手册——泰山版》中有这样一段介绍:

【推荐】使用entrySet遍历Map类集合KV,而不是keySet方式进行遍历。 说明:keySet其实是遍历了2次,一次是转为Iterator对象,另一次是从hashMap中取出key所对应的value。而entrySet只是遍历了一次就把key和value都放到了entry中,效率更高。如果是JDK8,使用Map.forEach方法。 正例:values()返回的是V值集合,是一个list集合对象;keySet()返回的是K值集合,是一个Set集合对象;entrySet()返回的是K-V值组合集合。

示例

package com.example.demo.map;

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

/**
 * @author: sunzhinan
 * @create: 2020-08-02 00:54
 * @description: HashMap遍历方式介绍
 */
public class TestHashMap {

    private static HashMap<String,String> map = new HashMap<>();

    static {
        map.put("name", "sunzhinan");
        map.put("age", "64");
        map.put("mail", "xxxx@163.com");
    }

    /**
     * foreach——entrySet方式
     */
    public static void traverse1(){
        // 遍历
        for (Map.Entry<String, String> entry : map.entrySet()) {
            System.out.println("key : " + entry.getKey());
            System.out.println("value : " + entry.getValue());
        }
    }

    /**
     * foreach——keySet方式
     */
    public static void traverse2(){
        // 遍历
        for (String key : map.keySet()) {
            System.out.println("key : " + key);
            System.out.println("value : " + map.get(key));
        }
    }

    /**
     * Iterator——keySet方式
     */
    public static void traverse3(){
        Iterator<HashMap.Entry<String, String>> iterator = map.entrySet().iterator();
        while (iterator.hasNext()){
            Map.Entry<String, String> entry = iterator.next();
            System.out.println("key : " + entry.getKey());
            System.out.println("value : " + entry.getValue());
        }
    }

    /**
     * Iterator——keySet方式
     */
    public static void traverse4(){
        Iterator<String> iterator = map.keySet().iterator();
        while (iterator.hasNext()){
            String key = iterator.next();
            System.out.println("key : " + key);
            System.out.println("value : " + map.get(key));
        }
    }

    /**
     * Stream——stream()方法
     */
    public static void traverse5(){
        System.out.println("---- 1 ----");
        map.entrySet().stream().forEach((entry)->{
            System.out.println("key : " + entry.getKey());
            System.out.println("value : " + entry.getValue());
        });
        System.out.println("---- 2 ----");
        map.keySet().stream().forEach((key)->{
            System.out.println("key : " + key);
            System.out.println("value : " + map.get(key));
        });
    }

    /**
     * Stream——parallelStream()方法
     */
    public static void traverse6(){
        map.entrySet().parallelStream().forEach((entry)->{
            System.out.println("key : " + entry.getKey());
            System.out.println("value : " + entry.getValue());
        });
    }

    /**
     * Lambda表达式——JDK8推荐
     */
    public static void traverse7(){
        map.forEach((key,value)->{
            System.out.println("key : " + key);
            System.out.println("value : " + value);
        });
    }

    public static void main(String[] args) {
        System.out.println("---- ForEach entrySet ----");
        traverse1();
        System.out.println("---- ForEach keySet ----");
        traverse2();
        System.out.println("---- Iterator entrySet ----");
        traverse3();
        System.out.println("---- Iterator keySet ----");
        traverse4();
        System.out.println("---- Stream stream ----");
        traverse5();
        System.out.println("---- Stream parallelStream ----");
        traverse6();
        System.out.println("---- Lambda表达式 ----");
        traverse7();
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值