遍历map
来源:互联网 发布:编程开发 编辑:程序博客网 时间:2024/06/02 00:08
在java中有很多种方法来遍历map。接下来我们就回顾下最常用的方法,并且比较下他们的优缺点。 各种map 在java中都实现了map接口,下面的方法适合任何一种map,只要是实现了map接口的。像hashmap,treemap,LinkeHashMap,Hashtable等等。
方法#1:通过通过循环entries 来遍历map
这种方法是最通用和效率比较好的方法。适合同时需要map的key 和value的情况。
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());}
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());}
由于foreach循环是在java5开始有的,所以这种方法适合比较新的版本。而且这个循环会抛空指针错误,如果你循环的map 为null,所以使用时候要检查是否为null.
方法#2 通过循环key和value 来遍历
如果你只是需要map的key或者values ,你可以循环遍历entrySet的keySet或者values
Map<Integer, Integer> map = new HashMap<Integer, Integer>();//iterating over keys onlyfor (Integer key : map.keySet()) { System.out.println("Key = " + key);}//iterating over values onlyfor (Integer value : map.values()) { System.out.println("Value = " + value);}
方法#3 使用迭代器 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.
这种方法看起来很繁琐,但是他有他的优势。首先这个是唯一的使用老版本的map的迭代方法。其次这也是唯一一个允许在迭代过程中通过iterator.remove()来删除map中的数据。如果你试图在foreach方法中进行删除操作,你会得到预料不到的结果。
从性能方面来说,这个方法与foreach循环相当。
方法#4 通过遍历key来获取对应的value
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);}
这个方法可以认为是方法#1的缩减版,但是从实际来看,这种方法是非常慢和效率低下的,因为通过key来获取value是比较耗时的。(这种方法对不同的map实现会比第一种方法慢20%--200%)。如何你有安装findbugs,你就可以检测到。鉴于效率来说,这个方法需要避免使用。
结论:
如何你只需要keys或者只需要values,使用方法#2.如果你是老的版本,并且有删除操作的使用方法#3。其他使用#1.
0 0
- 遍历MAP
- 遍历Map
- 遍历Map
- map遍历
- Map 遍历
- 遍历map
- 遍历MAP
- Map遍历
- Map 遍历
- MAP遍历
- 遍历Map
- 遍历Map
- 遍历Map
- Map 遍历
- Map遍历。。。。
- Map遍历
- 遍历Map
- map遍历
- java编程思想(第四版)第二章练习题-12
- 使用广播监听网络状况
- jquery 鼠标放入input框值清空离开恢复默认值
- ActionContext和ServletActionContext小结
- 在android的UI界面中实现全屏、或者去掉标题栏的效果
- 遍历map
- Python中的多进程处理
- Android应用如何开机自启动、自启动失败原因
- 简介(二)
- poj 1088+动态规划+记忆化搜索
- 邮储融易商城——基本功能预览(asp.net)
- HDU 1431 素数回文【暴力求解】
- JAVA如何判断网页编码
- opengl键值控制二