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

标签: Java, Map

添加新评论