Map集合是Java中非常常用的一个集合,通过Map集合可以实现对数据的快速检索和插入删除等操作;同样对Map集合的遍历也是十分重要的;如果你之前学过C++,那么对于Map的遍历操作可就不能像是C++那样通过下标遍历了;

这里我提供两种遍历Map集合的方式,以及性能和使用方式的比较;

通过key获取value

这种方式是获取Map的key值,通过 Map 的 get() 方法 获取对应的value值;

代码如下:

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;public class MapTraverse01 {public static void main(String[] args) {Map<Integer, String> map = new HashMap<>(); // 创建一个HashMap对象// 存入mapmap.put(1, "张三");map.put(2, "李四");map.put(3, "王五");map.put(4, "赵六");map.put(5, "小三");// 迭代器遍历Set<Integer> set = map.keySet(); // 获取key对应的Set集合Iterator<Integer> iterator = set.iterator(); // 通过迭代器遍历while (iterator.hasNext()) {Integer i = iterator.next();// 输出key并通过key输出valueSystem.out.println("key:" + i + " value:" + map.get(i));}System.out.println("=================");// foreach循环for (Integer i : map.keySet()) {System.out.println("key:" + i + " value:" + map.get(i));}System.out.println("=================");}
}

输出如下:

key:1 value:张三
key:2 value:李四
key:3 value:王五
key:4 value:赵六
key:5 value:小三
=================
key:1 value:张三
key:2 value:李四
key:3 value:王五
key:4 value:赵六
key:5 value:小三
=================

这里我用了迭代器和foreach循环,至于它们的区别我会在文章最后详细介绍

接下来分析一下这种方法的效率;
我们通过 keySet() 方法获取到了所有的key值,并没有获取到value值,这意味着每次遍历时通过 get() 方法得到value值时都需要再次遍历Map集合,就相当于遍历了两次,第一次是对key的Set集合遍历,第二次是通过map.get(key)来获取value值;
一旦数据量大的时候,这种遍历方式的效率就会明显降低;

当然,如果数据量较小时还是比较推荐这种方法的;

同时获取key和Value

这种方法是同时获取到 key 和 value 值,这里就不再使用 keySet() 方法了,而是使用 entrySet() 获取Map中的key-value对;

这里还是简单介绍一下Map.Entry<K,V>接口

public static interface Map.Entry<K,V>

英语好的可以结合理解一下对Map.Entry<K,V>接口的介绍:

A map entry (key-value pair). The Map.entrySet method returns a collection-view of the map, whose elements are of this class. The only way to obtain a reference to a map entry is from the iterator of this collection-view. These Map.Entry objects are valid only for the duration of the iteration; more formally, the behavior of a map entry is undefined if the backing map has been modified after the entry was returned by the iterator, except through the setValue operation on the map entry.

其中这里我们只需要记住两种方法:

就是分别获取到key值和value值;

下面我将用代码示范一下第二种遍历方式:

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;public class MapTraverse02 {public static void main(String[] args) {Map<Integer, String> map = new HashMap<>(); // 创建一个HashMap对象// 存入mapmap.put(1, "张三");map.put(2, "李四");map.put(3, "王五");map.put(4, "赵六");map.put(5, "小三");// 迭代器Set<Map.Entry<Integer, String>> set = map.entrySet(); // 获取map中的key-value对Iterator<Map.Entry<Integer, String>> iterator = set.iterator();while (iterator.hasNext()) {Map.Entry<Integer, String> i = iterator.next();// 这里必须定义局部变量,如果直接用迭代器获取key后迭代器就会前移,输出下一个value时就会到达下一个迭代的位置// System.out.println("key:" + iterator2.next().getKey() + " value:" + iterator2.next().getValue());// 上面这样不可以// 通过Entry内部类获取key和valueSystem.out.println("key:" + i.getKey() + " value:" + i.getValue());}System.out.println("=================");// foreach循环for (Map.Entry<Integer, String> i : map.entrySet()) {System.out.println("key:" + i.getKey() + " value:" + i.getValue());}System.out.println("=================");}
}

输出如下:

key:1 value:张三
key:2 value:李四
key:3 value:王五
key:4 value:赵六
key:5 value:小三
=================
key:1 value:张三
key:2 value:李四
key:3 value:王五
key:4 value:赵六
key:5 value:小三
=================

这种遍历方式在数据量大的时候比第一种方式效率更高,因为是同时获取的key和value值,所以还是要根据实际情况对这两种遍历方法进行选择;

可能开始接触Map.Entry会有不适应,多用用就好了,以后可能会考虑为Map.Entry专门写一篇博客,在这里留个位;

迭代器遍历和foreach遍历的区别

这里简单说一下这两种遍历方式的区别;
迭代器遍历的效率会比foreach循环遍历的效率高一点,但是它们的主要区别并不在这里;

只需要记住一点:
如果用foreach循环体,那么对集合元素进行增删改操作的时候,
就会出现异常ConcurrentModificationException
所以foreach仅仅用来遍历输出还是方便的,但是不要用来修改集合的数据;

如果需要对集合进行增删改操作,那么就使用迭代器遍历,可以使用 iterator 的 remove()方法;

这里就不做示范了,感兴趣可以自己尝试;

欢迎大家的点评!

[Java基础]Map集合的遍历相关推荐

  1. 黑马程序员----------------java基础-----------------Map集合

     ------- <a href="http://www.itheima.com" target="blank">android培训</a ...

  2. 【java】Map集合的遍历方式有几种?

    因为下一个博客想写Hashtable集合下的一个子类Properties集合,但是Map集合的遍历方式又有点遗忘了........... 下面通过API来复习一下: 文章目录 1. Map集合的第一种 ...

  3. java akiba,Map集合的遍历(java)

    Map集合通过entrySet 和 keySet都可以使用迭代器 以及for循环拿到key和value: import java.util.HashMap; import java.util.Iter ...

  4. Java基础 Map集合

    主要内容 Map集合 教学目标 能够说出Map集合特点 使用Map集合添加方法保存数据 使用"键找值"的方式遍历Map集合 使用"键值对"的方式遍历Map集合 ...

  5. java基础-Map集合、Collections集合、斗地主案例

    1.Map集合 1.1Map集合概述和特点 Map集合概述 interface Map<K,V> K:键的类型:V:值的类型 Map集合的特点 (1)键值对映射关系 (2)一个键对应一个值 ...

  6. java基础—Map集合的常见方法操作(java集合八)

    Map集合的常见方法操作 Map集合中的元素取出并打印的三种方式 import java.util.Collection; import java.util.HashMap; import java. ...

  7. [Java基础]Map集合基础

  8. java 定义map集合_java基础-Map集合

    java基础-Map集合 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Map集合概述 我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它 ...

  9. java把map值放入vector_Thinking in java基础之集合框架

    Thinking in java基础之集合框架 大家都知道我的习惯,先上图说话. 集合简介(容器) 把具有相同性质的一类东西,汇聚成一个整体,就可以称为集合,例如这里有20个苹果,我们把每一个苹果当成 ...

最新文章

  1. 关于Inflater
  2. table1函数----一维查表
  3. 《数据库系统实训》实验报告——数据库维护
  4. 手写自己的MyBatis框架-支持查询缓存
  5. Poor God Water【矩阵快速幂】
  6. 域控服务器取消验证_记一次域控服务器应急
  7. Eigen部分基本使用方法
  8. shell中的变量与eval(转)
  9. 山寨威武 仿冒Xoom先于行货获得Android 4.0升级
  10. 会员注册审核状态更新计算
  11. 使用adb安装apk
  12. OBLOG4.5 商业SQL版 漏洞解析
  13. 找工作神器,提取各大网站有效的招聘信息(前程无忧、智联招聘、猎聘网)...
  14. 关于react-router-dom 6.0.1的基础写法 解决Error A <Route> is only ever to be used as the child of <Routes>
  15. OA系统集团化共享服务平台,全面协同、全面移动
  16. 算法训练营 重编码_完成编码训练营后的第一年,我学到了教训。
  17. 越是领军人才,越要看基本素质
  18. 正射影像地理坐标转像素坐标c语言,Landsat 8影像像元地理坐标计算.pdf
  19. python爬虫豆瓣电影短评_【Python爬虫】BeautifulSoup爬取豆瓣电影短评
  20. 华为PPPOE协议+配置

热门文章

  1. android 截长图 方法,Android实现截屏与截长图功能
  2. 弱电工程网络传输基础知识讲解
  3. 和低压电气有关的71个问题
  4. 光栅衍射主极大个数_光栅的分类及常规指标介绍
  5. Interview:算法岗位面试—2019秋招校园招聘—算法工程师【机器学习、深度学习(偏图像)】秋招感悟:初期阶段的傲娇→中期阶段的紧张→后期阶段的蜕变
  6. BlockChain:《世界经济论坛:区块链将如何重塑金融业?》—20160812—听课笔记
  7. 中科院分词系统(NLPIR)JAVA简易教程
  8. 前台Vue、后台Django、设置axios解决csrf_token问题
  9. 功能测试话题分享-0323
  10. BindingException: Invalid bound statement (not found)问题排查:SpringBoot集成Mybatis重点分析...