Java中遍历Map
Java中Map这种数据结构非常常用,也非常实用。最常用的方法就是下面几个:
V get(Object key);
V put(K key, V value);
V remove(Object key);
boolean containsKey(Object key);
不过,对于Map的遍历操作还是很常用的。下面就介绍几种Map的遍历操作方法。
通过key的遍历
首先拿到Map的key的集合Set,然后使用Set的迭代器Iterator,遍历每个key,通过Map的get()方法获取其值。
Set<Object> set = map.keySet();
Iterator<Object> iterator = set.iterator();
while (iterator.hasNext()) {
Object key = iterator.next();
System.out.println(key + " " + map.get(key));
}
上述代码的前两行可以合成一行:
Iterator<String> iterator = map.keySet().iterator();
while (iterator.hasNext()) {
Object key = iterator.next();
System.out.println(key + " " + map.get(key));
}
上面这个版本就是我原来最常用的遍历方式。这个版本的进化版本就是使用foreach:
for (Object key : map.keySet()) {
System.err.println(key + " " + map.get(key));
}
这类方法的主要思想就是拿到key,然后使用get()方法拿到值。
通过Entry
Entry是Map的内部接口:
interface Entry<K,V>{
K getKey();
V getValue();
V setValue(V value);
boolean equals(Object o);
int hashCode();
}
可用通过遍历Map的Entry,调用Entry的getKey()方法和getValue()方法拿到键和值。
Iterator iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry entry = (Map.Entry) iterator.next();
System.err.println(entry.getKey() + " " + entry.getValue());
}
更加简单的foreach版本如下:
for (Map.Entry<Object, Object> entry : map.entrySet()) {
System.err.println(entry.getKey() + " " + entry.getValue());
}
这类方法的主要思想就是拿到Map的Entry,Entry就是键值对的组合。从效率上来说,通过Entry效率要稍高。http://stackoverflow.com/questions/3870064/performance-considerations-for-keyset-and-entryset-of-map