徹底搞懂java Map集合中values()方法與keySet()、entrySet()的區(qū)別

一、在Map集合中

(1)values():方法是獲取集合中的所有的value----沒有key,沒有對應關系.

(2)KeySet():
將Map中所有的key存入到set集合中。因為set具備迭代器。所有可以迭代方式取出所有的鍵,再根據(jù)get(key)方法。獲取每一個鍵對應的值。 keySet():迭代后只能通過get(key)取value.

(3)entrySet():
Set<Map.Entry<K,V>> entrySet() , 返回此映射中包含的映射關系的 Set 視圖。 Map.Entry表示映射關系。entrySet():迭代后可用 e.getKey(),e.getValue()取key和value。返回的是Entry接口 。

二、下面通過例子看看:

1、values()方式:

    Map<String,String> map = new HashMap<String,String>();
    map.put("01", "zhangsan");
    map.put("02", "lisi");
    map.put("03", "wangwu");
    Collection<String> collection = map.values();//返回值是個值的Collection集合
    System.out.println(collection);

    打印結果:
    [zhangsan, lisi, wangwu]

2、 keySet()方式:

Set<K> keySet() //返回值是個只存放key值的Set集合(集合中無序存放的)

    Map<String,String> map = new HashMap<String,String>();       
 
    map.put("01", "zhangsan");

    map.put("02", "lisi");
    map.put("03", "wangwu");
    Set<String> keySet = map.keySet();//先獲取map集合的所有鍵的Set集合

    Iterator<String> it = keySet.iterator();//有了Set集合,就可以獲取其迭代器。
            
    while(it.hasNext()){
            String key = it.next();
            String value = map.get(key);//有了鍵可以通過map集合的get方法獲取其對應的值。
                    
            System.out.println("key: "+key+"-->value: "+value);//獲得key和value值
            }

3、 entrySet()方式:

Set<Map.Entry<K,V>> entrySet() //返回映射所包含的映射關系的Set集合(一個關系就是一個鍵-值對),就是把(key-value)作為一個整體一對一對地存放到Set集合當中的。

    Map<String,String> map = new HashMap<String,String>();
    map.put("01", "zhangsan");
    map.put("02", "lisi");
    map.put("03", "wangwu");

    //通過entrySet()方法將map集合中的映射關系取出(這個關系就是Map.Entry類型)
    Set<Map.Entry<String, String>> entrySet = map.entrySet();

    //將關系集合entrySet進行迭代,存放到迭代器中                
    Iterator<Map.Entry<String, String>> it2 = entrySet.iterator();
            
    while(it2.hasNext()){
            Map.Entry<String, String> me = it2.next();//獲取Map.Entry關系對象me
            String key2 = me.getKey();//通過關系對象獲取key
            String value2 = me.getValue();//通過關系對象獲取value
                    
            System.out.println("key: "+key2+"-->value: "+value2);
    }

三、總結:

    雖然使用keyset及entryset來進行遍歷能取得相同的結果

    但兩者的遍歷速度是有差別的

    keySet():迭代后只能通過get()取key 

    entrySet():迭代后可以e.getKey(),e.getValue()取key和value。返回的是Entry接口 

    說明:keySet() 的速度比 entrySet() 慢了很多,也就是keySet方式遍歷Map的性能不如entrySet性能好
    為了提高性能,以后多考慮用entrySet()方式來進行遍歷。
期待更加優(yōu)秀的自己!
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容