遍歷HashMap的幾種方式以及如何獲得Hashmap的key和Vaue-Java

一般用的時候分爲以下幾種情況。

For-Each循環是Java5新引入的,遍歷的map是null的話,For-Each循環會拋出NullPointerException異常,所以在遍歷之前你應該判斷是否爲空引用。

1. 遍歷key(比entrySet迭代快一點點)

這個方法比entrySet迭代具有輕微的性能優勢(大約快10%)

        for(Integer key: map.keySet()){
            System.out.println(key);
        }

2. 遍歷value(比entrySet迭代快一點點)

這個方法比entrySet迭代具有輕微的性能優勢(大約快10%)

        for(Integer value : map.values()){
            System.out.println(value);
        }

3. 同時遍歷key和value

可以用以下幾種方式。

3.1 用entrySet() + foreach (用!)

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

3.2 用entrySet() + 迭代器 (使勁用!)

相當於獲得鍵值對集合entry,並遍歷

        //返回的是entry<Integer,Integer>類型的迭代器
        Iterator<Map.Entry<Integer, Integer>> it = map.entrySet().iterator();

         //返回時沒聲明it的類型,it.next()需要強轉
        // Iterator it = map.entrySet().iterator(); 
        while(it.hasNext()){
            Map.Entry<Integer, Integer> entry = it.next();
            System.out.println(entry.getKey() + " " +entry.getValue());
        }

3.3 keySet + foreach (耗時,不推薦)

keySet拿到key,get一下就可以在同一個for循環內拿到value

這個方法看上去更簡潔,但是實際上它更慢更低效,通過key得到value值更耗時。

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

3.4 用keySet+ 迭代器(耗時,不推薦)

獲得鍵集合,並遍歷,拿到key,通過key去get值。

這個方法看上去更簡潔,但是實際上它更慢更低效,通過key得到value值更耗時。

        //返回時聲明瞭it是Integet類型的迭代器,不用強轉
        //Iterator<Integer> it = map.keySet().iterator();

        //返回時沒聲明it的類型,it.next()需要強轉
        Iterator it = map.keySet().iterator();  
        while(it.hasNext()){
           // Integer key = it.next();
            Integer key = (Integer)it.next();
            Integer value = map.get(key);
            System.out.println(key + "" + value);
        }

以上代碼彙總後如下。

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class HashMapTraversal {
    public static void main(String[] args){
        HashMap<Integer, Integer> map = new HashMap<>();
        map.put(3, 6);
        map.put(2, 5);
        Traversal01(map);
        Traversal02(map);
        Traversal03(map);
        Traversal04(map);
        Traversal05(map);

    }
    // entrySet() 用for循環拿到entry
    public static void Traversal01(HashMap<Integer, Integer> map){
        for(Map.Entry<Integer, Integer> entry : map.entrySet()){
            System.out.println(entry.getKey()+" " +entry.getValue());
        }

    }
    // keySet() 用for循環拿到key
    public static void Traversal00(HashMap<Integer, Integer> map){
        for(Integer key : map.keySet()){
            Integer 
            System.out.println(entry.getKey()+" " +entry.getValue());
        }

    }
    // 單獨拿到keys(用keySet())  或者單獨拿到values(map.values())
    public static void Traversal02(HashMap<Integer, Integer> map){
        for(Integer key: map.keySet()){
            System.out.println(key);
        }
        for(Integer value : map.values()){
            System.out.println(value);
        }
    }
    // keySet拿到key,get一下就可以在同一個for循環內拿到value
    public static void Traversal03(HashMap<Integer, Integer> map){
        for (Integer key : map.keySet()) {
            Integer value = map.get(key);
            System.out.println(key+ " " +value);
        }
    }
    // entryset迭代器  獲得鍵值對集合entry,並遍歷
    public static void Traversal04(HashMap<Integer, Integer> map){

        //返回的是entry<Integer,Integer>類型的迭代器
        Iterator<Map.Entry<Integer, Integer>> it = map.entrySet().iterator();

         //返回時沒聲明it的類型,it.next()需要強轉
        // Iterator it = map.entrySet().iterator(); 
        while(it.hasNext()){
            Map.Entry<Integer, Integer> entry = it.next();
            System.out.println(entry.getKey() + " " +entry.getValue());
        }
    }
    // keyset迭代器  獲得鍵集合,並遍歷,拿到key,通過key去get值。
    public static void Traversal05(HashMap<Integer, Integer> map){

        //返回時聲明瞭it是Integet類型的迭代器,不用強轉
        //Iterator<Integer> it = map.keySet().iterator();

        //返回時沒聲明it的類型,it.next()需要強轉
        Iterator it = map.keySet().iterator();  
        while(it.hasNext()){
           // Integer key = it.next();
            Integer key = (Integer)it.next();
            Integer value = map.get(key);
            System.out.println(key + "" + value);
        }
    }

}

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章