JavaMap两种遍历方式keySet与entrySet详解
作者:自律的西瓜L 发布时间:2022-04-17 14:36:29
标签:Java,Map,keySet,entrySet
1.使用keySet进行遍历
实现步骤:
(1)使用Map集合中的方法keySet(),把Map集合所有的key取出来,存储到一个Set集合中
(2)遍历set集合,获得Map集合中的每一个key
(3)通过Map集合中的方法get(key),通过key找到value
@Test
public void testKeySet() {
Map<String, Integer> map = new ConcurrentHashMap<>(16);
map.put("one",1);
map.put("two",2);
map.put("three",3);
// 1.增强for循环遍历map中的key
for (String key : map.keySet()) {
// 通过key找到对应的value
Integer value = map.get(key);
System.out.println(key + "->" +value);
}
System.out.println("------------------------");
// 2.使用迭代器来进行遍历(map集合中所有的key取出来,存储到Set集合中)
Iterator<String> iteratorKey = map.keySet().iterator();
while (iteratorKey.hasNext()){
String key = iteratorKey.next();
Integer value = map.get(key);
System.out.println(key + "->" +value);
}
}
2.使用entrySet进行遍历
实现步骤:
(1)Map.entrySet()把map的键值映射成Set集合
(2)Map.entrySet迭代器会生成EntryIterator,其返回的实例是一个包含key/value键值对的对象
(3)getKey(): 返回键值对的key
(4)getValue(): 返回键值对的value
@Test
public void testEntrySet() {
Map<String, Integer> map = new ConcurrentHashMap<>(16);
map.put("one",1);
map.put("two",2);
map.put("three",3);
// Map.entrySet迭代器会生成EntryIterator,其返回的实例是一个包含key/value键值对的对象。
// 而keySet中迭代器返回的只是key对象,还需要到map中二次取值。故entrySet要比keySet快一倍左右。
Set<Map.Entry<String, Integer>> entries = map.entrySet();
Iterator<Map.Entry<String, Integer>> entryIterator = entries.iterator();
while (entryIterator.hasNext()){
// 迭代出来的是每一个实例的对象,包含键值对
Map.Entry<String, Integer> entry = entryIterator.next();
String key = entry.getKey();
Integer value = entry.getValue();
System.out.println(key + "->" + value);
}
}
3.对比
(1)keySet获取value只能通过先获取key才能得到value
(2)entrySet在迭代之后可以直接从迭代出来的实例对象中直接获取Key和Value
(3)两个方法遍历的结果都一样,若对查询速度有要求就选entrySet(),entrySet可以提高性能。
来源:https://blog.csdn.net/weixin_42218169/article/details/126143697


猜你喜欢
- 1、比较器①比较器的引入a.首先,当我们单一地比较某一种数据类型的数组时,可以直接用Arrays.sort()进行实现b.而当我们同时含有多
- 泛型类泛型类封装不是特定于具体数据类型的操作。泛型类最常用于集合,如链接列表、哈希表、堆栈、队列、树等。像从集合中添加和移除项这样的操作都以
- 哈夫曼(Huffman)编码是一种常用的压缩编码方法,是 Huffman 于 1952 年为压缩文本文件建立的。它的基本原理是频繁使用的数据
- 使用linq把多列的List转化为只有指定列的List1、方式一2、方式二
- 本文实例为大家分享了Java单例模式利用HashMap实现缓存数据的具体代码,供大家参考,具体内容如下一、单例模式是什么?单例模式是一种对象
- 在做2048这个游戏时,因为菜单页面还能查看游戏规则,而这些规则又不在同一个页上,所以需要滑动页面实现页面切换,但是仅仅使用unity提供的
- 代码背景一个班级,有两类学生,A类:不学习,玩,但是玩的东西不一样,有的是做游戏,有的是看电视B类:放哨的学生,专门看老师的动向,如果老师进
- 解析和遍历一个HTML文档如何解析一个HTML文档:String html = "<html><head>
- 本文实例讲述了Android软键盘弹出时的界面控制方法。分享给大家供大家参考,具体如下:有时候androidactivity弹出软键盘后布局
- 在网上找到了一个可以防页面滚动滑到顶端或底部的时候, 漏出微信丑丑的灰色底,下面小编把核心代码分享给大家供大家参考!我的核心代码:preve
- 每个Handler对象与创建它的线程相关联,并且每个Handler对象只能与一个线程相关联。Handler一般有两种用途:1)执行计划任务,
- 先看效果图:(以公司附近的国贸为中心点)上面是地图,下面是地理位置列表,有的只有地理位置列表(QQ动态的位置),这是个很常见的功能。它有个专
- 本文介绍了Android:利用SharedPreferences实现自动登录,具体如下:主要代码:public class LoginAct
- springBoot使用事物比较简单,在Application启动类s上添加@EnableTransactionManagement注解,然
- 前言最近在刷java面试题偶然看到这类问题(try/finally中含有return时的执行顺序),觉得挺有意思于是小小的研究了一下,希望经
- 本文实例为大家分享了Android下载进度监听和通知的具体代码,供大家参考,具体内容如下下载管理器关于下载进度的监听,这个比较简单,以apk
- 基数排序也是桶排序的一种,也是跟样本数据强相关的,且基数排序要求样本数据是非负的十进制数,如果有小数或者负数,那么代码将要大量重写!这就是不
- 1.常见字符串编码常见的字符串编码有:LATIN1 只能保存ASCII字符,又称ISO-8859-1。UTF-8 变长字节编码,一个字符需要
- 简介说明 项目我们经常会有前后端时间转换的场景,比如:创建时间、更新时间等。一般情况下
- 对 Debug 的好奇初学 Java 时,我对 IDEA 的 Debug 非常好奇,不止是它能查看断点的上下文环境,更神奇的是我可以在断点处