当前位置: 首页 > news >正文

Java Collection(8)——Map的遍历方式

1.前言

Map是一个接口,这意味着它不能直接实例化对象,必须要通过具体的实现类来实例化对象。Map接口的实现类有:

HashMap,Treemap(Java
Collection(6)——Map&Set)

HashTable,ConcurrentMap( JAVA EE(10)——线程安全——synchronized &
JUC(java.util.concurrent) 的常见类 &
线程安全的集合类)

2.Map的遍历方式

以下的遍历方式适用于所有的Map实现类

2.1 keySet()

作用:返回一个Set视图,该集合包含Map中的所有key
用途:一般适用于只需要键(key)的场景
优点:返回的视图只包含key,内存占用较少
缺点:如果需要同时访问keyvalue,可以遍历Set集合的同时拿到key,再使用public V get(Object key)方法拿到value,这样就完成了对键值对的遍历,但是每访问一个key都需要调用get(Object key)方法,这可能会一定程度上影响性能

public static void main(String[] args) {HashMap<Integer,String> map = new HashMap<>();map.put(1,"A");map.put(2,"B");map.put(3,"C");//使用foreach遍历Set<Integer> integers = map.keySet();for (Integer integer : integers){System.out.println(integer + " " + map.get(integer));}System.out.println("=========================================================");//使用迭代器Iterator<Integer> iterator = map.keySet().iterator();while (iterator.hasNext()){Integer next = iterator.next();System.out.println(next + " " + map.get(next));}
}

注意一:keySet()方法返回的是一个视图,并不是一个独立的集合(没有new一个集合),,这意味着对keySet的修改会影响到原始的Map

在这里插入图片描述

注意二:使用foreach遍历Set<Integer>集合时,不能对该集合进行修改

在这里插入图片描述
如果想在遍历的过程中对Set集合进行修改,需要使用迭代器进行遍历,并且显式地调用迭代器地remove()方法
在这里插入图片描述

注意三:当使用迭代器遍历Set<Integer>集合时,需要正确使用,上面的代码是正确用法,下面来展示一些错误案例

案例一:
在这里插入图片描述

因为调用next()方法会产生两个效果:
1.获取到迭代器当前指向的元素
2.迭代器指向下一个元素
在这里插入图片描述
案例二:
在这里插入图片描述
在这里插入图片描述

2.2 entrySet()

作用:返回Set<Map.Entry<K,V>>视图,即键值对集合
用途:用于遍历Map中的所有键值对
优点:一次性获取键和值,避免频繁调用get(Object key)方法,在同时访问键和值的场景下,性能高于keySet()方法
缺点:返回的试图包含Map.Entry<K,V>对象,内存开销较大

public static void main(String[] args) {HashMap<Integer,String> map = new HashMap<>();map.put(1,"A");map.put(2,"B");map.put(3,"C");//使用foreach遍历Set<Map.Entry<Integer, String>> entries = map.entrySet();for (Map.Entry<Integer, String> entry : entries){System.out.println(entry);}System.out.println("=========================================================");//使用迭代器final Iterator<Map.Entry<Integer, String>> iterator = map.entrySet().iterator();while (iterator.hasNext()){System.out.println(iterator.next());}
}

2.3 values()

作用:返回Collection< V >视图,即value的集合
用途:用于遍历Map中的所有value
缺点:无法访问value对应的key
优点:在只需要访问value的场景下,性能较高

public static void main(String[] args) {HashMap<Integer,String> map = new HashMap<>();map.put(1,"A");map.put(2,"B");map.put(3,"C");//使用foreach遍历Collection<String> values = map.values();for (String s : values){System.out.println(s);}System.out.println("=========================================================");//使用迭代器Iterator<String> iterator = map.values().iterator();while (iterator.hasNext()){System.out.println(iterator.next());}
} 

相关文章:

  • LLM做逻辑推理题 - 拥有古物的是谁?
  • C语言数据结构---二叉树---堆的应用
  • FreeRTOS事件标志组
  • LeetCode算法题(Go语言实现)_52
  • OpenCV 图形API(42)颜色空间转换-----将 BGR图像转换为 I420(YUV 4:2:0)格式函数BGR2I420()
  • 考研数据结构之图的应用:最小生成树、最短路径、拓扑排序与关键路径
  • 邮件自动回复助手(Rasa/SMTP)实现教程
  • 【HDFS入门】HDFS核心配置与优化指南概述
  • 【Pytorch之一】--torch.stack()方法详解
  • C#学习第15天:泛型
  • list.
  • 【工具变量】各地级市人口集聚及多中心程度数据集(2000-2023年)
  • Unity入门笔记(缘更)
  • 探索大语言模型(LLM):马尔可夫链——从诗歌分析到人工智能的数学工具
  • 高精求小数幂--高精度乘法+小数
  • k230学习笔记-疑难点(1)
  • 第19章:基于efficientNet实现的视频内容识别系统
  • 何小鹏在得意的笑
  • 第五章 SQLite数据库:3、SQLite 常用语法及使用案例
  • Lesson 12 Goodbye and good luck
  • 媒体:黑话烂梗包围小学生,“有话好好说”很难吗?
  • 中国农业国际交流协会会长王守聪失联已逾半年,协会启动罢免
  • 体坛联播|安切洛蒂预计执教巴西国家队,利拉德确诊跟腱撕裂
  • 淮安四韵·名城新章: 网络名人领略“运河之都”魅力
  • 江西省国资委原副主任李键主动向组织交代问题,接受审查调查
  • 澎湃思想周报丨数字时代的育儿;凛冬已至好莱坞