JAVA中遍历map的四种方式
2020-02-17 05:18
639 查看
关于java中遍历map四种方式:
方式一
这是最常见的并且在大多数情况下也是最可取的遍历方式,推荐使用。用foreach进行entryset进行遍历,可以同时获取到键、值。
Map<Integer, Integer> map = new HashMap<Integer, Integer>(); for (Map.Entry<Integer, Integer> entry : map.entrySet()) { System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); }
方法二
在for-each循环中遍历keys或values。
如果只需要map中的键或者值,你可以通过keySet或values来实现遍历,而不是用entrySet。(区别于方法一)
Map<Integer, Integer> map = new HashMap<Integer, Integer>(); //遍历map中的键 for (Integer key : map.keySet()) { System.out.println("Key = " + key); } //遍历map中的值 for (Integer value : map.values()) { System.out.println("Value = " + value); }
该方法比entrySet遍历在性能上稍好,而且代码更加简洁。
方法三
使用Iterator遍历
使用泛型:
Map<Integer, Integer> map = new HashMap<Integer, Integer>(); Iterator<Map.Entry<Integer, Integer>> entries = map.entrySet().iterator(); while (entries.hasNext()) { Map.Entry<Integer, Integer> entry = entries.next(); System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); }
不使用泛型:
Map map = new HashMap(); Iterator entries = map.entrySet().iterator(); while (entries.hasNext()) { Map.Entry entry = (Map.Entry) entries.next(); Integer key = (Integer)entry.getKey(); Integer value = (Integer)entry.getValue(); System.out.println("Key = " + key + ", Value = " + value); }
可以在keySet和values上应用同样的方法。
该种方式看起来冗余却有其优点所在。
首先,在老版本 java中这是惟一遍历map的方式。
其次,你可以在遍历时调用iterator.remove()来删除entries,另两个方法则不能。即可以在遍历中进行编辑操作。根据javadoc的说明,如果在for-each遍历中尝试使用此方法,结果是不可预测的。(对于foreach的优缺点可以参考《Effective Java 第二版》46条)
从性能方面看,该方法类同于for-each遍历(即方法二)的性能。
方法四、
通过键找值遍历(效率低)
Map<Integer, Integer> map = new HashMap<Integer, Integer>(); for (Integer key : map.keySet()) { Integer value = map.get(key); System.out.println("Key = " + key + ", Value = " + value);
作为方法一的替代,这个代码看上去更加干净;但实际上它相当慢且无效率。因为从键取值是耗时的操作(与方法一相比,在不同的Map实现中该方法慢了20%~200%)。所以尽量避免使用。
总而言之(伸手党):
1、通常情况下都选择方法一。
2、如果仅需要键(keys)或值(values)使用方法二。
3、如果你使用的语言版本低于java 5,或是打算在遍历时删除entries,必须使用方法三。
- 点赞 2
- 收藏
- 分享
- 文章举报
相关文章推荐
- JAVA安装
- IDEA 创建Spring cloud Eureka 注册中心
- springmvc 拦截器配置及指定接口拦截配置
- eclipse导包快捷键
- 2.第一个java HellorWorld!程
- 6.eclipse工具常用快捷键
- java写的大数阶乘
- 高效java
- java 类初始化路线
- Windows10环境下通过Xshell向服务器上安装mysql和jdk
- JAVA入门 第五周 1多项式
- 程序设计入门—Java语言 第五周编程题 2井字棋(5分)
- 程序设计入门—Java语言 第六周编程题 1 单词长度(4分)
- 黑马程序员——java的简介
- java学习心得之客户端编程
- 如何在IDEA中创建Spring Boot项目
- Java运行环境的搭载
- Java修炼日志
- Java实现单个文件复制
- Java批量建立文件夹