我是靠谱客的博主 激动高山,最近开发中收集的这篇文章主要介绍HashMap的几种遍历方式分析,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

简要介绍HashMap

相信大家学过数据结构的对哈希表(Hash table)并不陌生,即使不熟悉你也应该听过哈希冲突等词,哈希表也称散列表,是一种非常重要的数据结构,出现于各种应用场景,许多缓存技术的核心就是内存中维护一张非常大的哈希表。
HashMap基于哈希表Map接口实现,提供了所有可选的映射操作,其相对于数组、线性链表、二叉树等数据结构在进行添加、删除查找等操作的性能非常高,时间复杂度为O(1)(不考虑哈希冲突的情况)。
HashMap的主要操作是put和get,内部的Entry数组是基本组成单元,每一个Entry包含一个Key-value键值对,可以说它是由数组+链表组成的。
HashMap的几种遍历方式包括使用迭代器方式遍历、For Each方式遍历,Lambda表达式遍历以及Stream API遍历(后面两种应该是JDK 1.8+以后才有的)在这里主要介绍前面三种方式遍历。
使用迭代器和For Each遍历又可以细分为分别使用EntrySet和KeySet的方式遍历。
entrySet()
在这里插入图片描述
entrySet如文档描述,是返回此映射中包含的映射的Set视图。
keySet()
在这里插入图片描述
keySet()方法返回此映射中包含的键的Set视图。
两者区别也一目了然,一个返回键值对,而一个只会返回键。

迭代器遍历HashMap

1.迭代器EntrySet()

/*
            1.使用EntrySet()方法的迭代器
        */
        HashMap<Integer,String> map1=new HashMap<>();
        map1.put(1,"大王");
        map1.put(2,"小王");
        map1.put(3,"♠2");
        map1.put(4,"♠A");
        map1.put(5,"♠K");
        Iterator<Map.Entry<Integer,String>> it = map1.entrySet().iterator();
        while(it.hasNext()) {
            Map.Entry<Integer, String> entry = it.next();
            System.out.println(entry.getKey() + entry.getValue());
        }
        //System.out.println(map1);

输出结果(最后一行为直接打印HashMap的结果)
在这里插入图片描述
2.迭代器KeySet()

        /*
            2.使用KeySet()方法的迭代器
         */
        HashMap<Integer,String> map2=new HashMap<>();
        map2.putAll(map1);
        Iterator<Integer> it = map2.keySet().iterator();
        while(it.hasNext()) {
            Integer key = it.next();
            System.out.println(key+ map2.get(key));
        }

输出结果
在这里插入图片描述

ForEach遍历HashMap

1.ForEach EntrySet()

/*
            3.使用EntrySet()的foreach方法
         */
        HashMap<Integer,String> map3=new HashMap<>();
        map3.putAll(map2);
        for (Map.Entry<Integer, String> entry : map1.entrySet()) {
            System.out.println(entry.getKey() + entry.getValue());
        }

2.ForEach KeySet()

/*
            4.使用keySet()的foreach方法
         */
        HashMap<Integer,String> map4=new HashMap<>();
        map4.putAll(map3);
        for(Integer key: map1.keySet()){
            System.out.println(key+map4.get(key));
        }

Lambada遍历HashMap

/*
            5.使用Lambada表达式
         */
        HashMap<Integer,String> map5=new HashMap<>();
        map5.putAll(map4);
        map5.forEach((key,value)->{
            System.out.println(key+value);
        });

以上五种方法的输出结果都是一样的,但是相信大家看过代码之后会有一定的理解了,使用Lambada表达式能有效地改观代码,但其核心仍然是使用foreach的遍历,并且在使用迭代器调用entrySet()方式IDEA直接建议改成entrySet()的foreach遍历方法,仅从遍历方式来说,foreach方法似乎会更加合理,同时比较entrySet和keySet方法可以发现,二者因为存储不同而在取值方法上也有些不同,entrySet可以直接通过getKey()和getValue()获取内容,keySet因为存储的是键,需要通过对应映射关系去寻找值。

最后

以上就是激动高山为你收集整理的HashMap的几种遍历方式分析的全部内容,希望文章能够帮你解决HashMap的几种遍历方式分析所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(69)

评论列表共有 0 条评论

立即
投稿
返回
顶部