java map迭代_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > java map迭代

java map迭代

 2013/12/11 16:09:08  happyqing  程序员俱乐部  我要评论(0)
  • 摘要:在java中有很多种方法来遍历map。接下来我们就回顾下最常用的方法,并且比较下他们的优缺点。各种map在java中都实现了map接口,下面的方法适合任何一种map,只要是实现了map接口的。像hashmap,treemap,LinkeHashMap,Hashtable等等。方法#1:通过通过循环entries来遍历map这种方法是最通用和效率比较好的方法。适合同时需要map的key和value的情况。Map<Integer,Integer>map=newHashMap<
  • 标签:Map Java

在java中有很多种方法来遍历map。接下来我们就回顾下最常用的方法,并且比较下他们的优缺点。 各种map 在java中都实现了map接口,下面的方法适合任何一种map,只要是实现了map接口的。像hashmap,treemap,LinkeHashMap,Hashtable等等。

? ? ? 方法#1:通过通过循环entries 来遍历map ? ? ? ? 这种方法是最通用和效率比较好的方法。适合同时需要map的key 和value的情况。
Map<Integer,Integer> map =newHashMap<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 =newHashMap<Integer,Integer>();

//iterating over keys only
for(Integer key : map.keySet()){
? ? System.out.println("Key = "+ key);
}

//iterating over values only
for(Integer value : map.values()){
? ? System.out.println("Value = "+ value);
}
? 方法#3 使用迭代器 iterator

通常:

Map<Integer,Integer> map =newHashMap<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 =newHashMap();
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方法中进行caozuo.html" target="_blank">删除操作,你会得到预料不到的结果。

从性能方面来说,这个方法与foreach循环相当。

方法#4 通过遍历key来获取对应的value

?

Map<Integer,Integer> map =newHashMap<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.
发表评论
用户名: 匿名