天天看點

【java筆記】java中的Map.Entry和Map.entrySet()方法的使用

Map.entrySet()方法傳回的是一個Set<Map.Entry<K,V>>類型的值,首先該傳回值是一個集合Set,集合中的元素是Map.Entry<K,V>類型的,每個Map.Entry可以看作是一個鍵值對對象,可以通過getKey()和getValue()方法分别擷取其鍵和值。

Map.entrySet()方法主要用在對Map的鍵和值的周遊上,你可能會問了,既然已經有了更簡便的方法去通路Map的鍵和值,為什麼又要弄一個相對複雜的東西呢?答案就是速度更快,特别是在對大容量的Map進行鍵值對的周遊時。先看下面例子中的兩種周遊方式。

package ecnu.cn;

import java.util.HashMap;
import java.util.Map;

public class MyTest {

    public static void main(String[] args) {
        Map<Integer, String> map = new HashMap<>();
        map.put(1, "value1");
        map.put(2, "value2");
        map.put(3, "value3");
        map.put(4, "value4");
        map.put(5, "value5");

        for (Integer key : map.keySet()) {
            System.out.println("key: " + key + "  value: " + map.get(key));
        }
        System.out.println();

        for(Map.Entry<Integer,String> entry:map.entrySet()){
            System.out.println("key: "+entry.getKey()+"  value: "+entry.getValue());
        }
    }
}
           

那為什麼第一種常用的周遊方式會更慢呢?我的了解是:該種方式是先取出所有鍵的集合,然後拿着每個鍵再去Map中查找對應的值。而第二種方法是直接周遊每個鍵值對,直接用getKey()和getValue()方法分别擷取其鍵和值即可。是以很明顯第一種方式是多了一步的,也就更慢一些了。