前言
关于java中的map遍历有多种方法,从最早的Iterator,到java5支持的foreach,再到java8 Lambda,让我们一起来看下具体的用法以及各自的优缺点
先初始化一个map
public class TestMap { public static Map<Integer, Integer> map = new HashMap<Integer, Integer>(); }
keySet values
如果只需要map的key或者value,用map的keySet或values方法无疑是最方便的
// KeySet 获取key public void testKeySet() { for (Integer key : map.keySet()) { System.out.println(key); } } // values 获取value public void testValues() { for (Integer value : map.values()) { System.out.println(value); } }
keySet get(key)
如果需要同时获取key和value,可以先获取key,然后再通过map的get(key)获取value
需要说明的是,该方法不是最优选择,一般不推荐使用
// keySet get(key) 获取key and value public void testKeySetAndGetKey() { for (Integer key : map.keySet()) { System.out.println(key + ":" + map.get(key)); } }
entrySet
通过对map entrySet的遍历,也可以同时拿到key和value,一般情况下,性能上要优于上一种,这一种也是最常用的遍历方法
// entrySet 获取key and value public void testEntry() { for (Map.Entry<Integer, Integer> entry : map.entrySet()) { System.out.println(entry.getKey() + ":" + entry.getValue()); } }
Iterator
对于上面的几种foreach都可以用Iterator代替,其实foreach在java5中才被支持,foreach的写法看起来更简洁
但Iterator也有其优势:在用foreach遍历map时,如果改变其大小,会报错,但如果只是删除元素,可以使用Iterator的remove方法删除元素
// Iterator entrySet 获取key and value public void testIterator() { Iterator<Map.Entry<Integer, Integer>> it = map.entrySet().iterator(); while (it.hasNext()) { Map.Entry<Integer, Integer> entry = it.next(); System.out.println(entry.getKey() + ":" + entry.getValue()); // it.remove(); 删除元素 } }
Lambda
java8提供了Lambda表达式支持,语法看起来更简洁,可以同时拿到key和value,不过,经测试,性能低于entrySet,所以更推荐用entrySet的方式
// Lambda 获取key and value public void testLambda() { map.forEach((key, value) -> { System.out.println(key + ":" + value); }); }
简单性能测试
用10万条数据,做了一个简单性能测试,数据类型为Integer,map实现选取HashMap
static { for (int i = 0; i < 100000; i++) { map.put(i, 1); } }
测试结果如下:
KeySet: 392 Values: 320 keySet get(key): 552 entrySet: 465 entrySet Iterator:508 Lambda: 536
需要说明的是,map存储的数据类型,map的大小,以及map的不同实现方式都会影响遍历的性能,所以该测试结果仅供参考
总结
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对小牛知识库的支持。
本文向大家介绍java 遍历Map的几种方法总结,包括了java 遍历Map的几种方法总结的使用技巧和注意事项,需要的朋友参考一下 一、迭代key&value 第一种方式:迭代entrySet 1.方法一 2.方法二 第二种方式:迭代keySet 3.方法三 4.方法四 5.小结 注意: 遍历Map类集合KV,推荐使用entrySet而不是keySet 原因: keySet
本文向大家介绍java 遍历MAP的几种方法示例代码,包括了java 遍历MAP的几种方法示例代码的使用技巧和注意事项,需要的朋友参考一下 java中遍历MAP的几种方法 第一种用for循环 第二种用迭代 用keySet()迭代 用entrySet()迭代 以上就是对Java 遍历MAP的资料整理,后续继续补充相关资料,谢谢大家对本站的支持!
本文向大家介绍详解java中的6种单例写法及优缺点,包括了详解java中的6种单例写法及优缺点的使用技巧和注意事项,需要的朋友参考一下 在java中,单例有很多种写法,面试时,手写代码环节,除了写算法题,有时候也会让手写单例模式,这里记录一下单例的几种写法和优缺点。 1.初级写法 2.加锁 3.饿汉式 4.懒汉式 5.双锁检验 6.内部类 1.初级写法 上面这种写法,在并发环境下,会出现多个实例。
本文向大家介绍Java中Map的遍历方法及性能测试,包括了Java中Map的遍历方法及性能测试的使用技巧和注意事项,需要的朋友参考一下 1. 阐述 对于Java中Map的遍历方式,很多文章都推荐使用entrySet,认为其比keySet的效率高很多。理由是:entrySet方法一次拿到所有key和value的集合;而keySet拿到的只是key的集合,针对每个key,都要去Map中额外查找一次va
本文向大家介绍Map获取键值,Map的几种遍历方法总结(推荐),包括了Map获取键值,Map的几种遍历方法总结(推荐)的使用技巧和注意事项,需要的朋友参考一下 Map获取键值 Map以按键/数值对的形式存储数据,和数组非常相似,在数组中存在的索引,它们本身也是对象。 Map的接口 Map---实现Map Map.Entry--Map的内部类,描述Map中的按键/数值对。 SortedMap---扩
本文向大家介绍JavaScript中遍历的十种方法总结,包括了JavaScript中遍历的十种方法总结的使用技巧和注意事项,需要的朋友参考一下 1.while循环 while后面跟循环条件和执行语句,只要满足条件,就会一直执行里面的执行 2.do...while循环 与while相似,但是他会先执行一次,再做判断条件 3.for循环 4.forEach循环 5.for...in循环 一般用来遍历对