遍历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 entry : map.entrySet()){
            System.out.println(entry.getKey()+" " +entry.getValue());
        }

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

相当于获得键值对集合entry,并遍历

        //返回的是entry类型的迭代器
        Iterator> it = map.entrySet().iterator();

         //返回时没声明it的类型,it.next()需要强转
        // Iterator it = map.entrySet().iterator(); 
        while(it.hasNext()){
            Map.Entry 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 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 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 map){
        for(Map.Entry entry : map.entrySet()){
            System.out.println(entry.getKey()+" " +entry.getValue());
        }

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

    }
    // 单独拿到keys(用keySet())  或者单独拿到values(map.values())
    public static void Traversal02(HashMap 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 map){
        for (Integer key : map.keySet()) {
            Integer value = map.get(key);
            System.out.println(key+ " " +value);
        }
    }
    // entryset迭代器  获得键值对集合entry,并遍历
    public static void Traversal04(HashMap map){

        //返回的是entry类型的迭代器
        Iterator> it = map.entrySet().iterator();

         //返回时没声明it的类型,it.next()需要强转
        // Iterator it = map.entrySet().iterator(); 
        while(it.hasNext()){
            Map.Entry entry = it.next();
            System.out.println(entry.getKey() + " " +entry.getValue());
        }
    }
    // keyset迭代器  获得键集合,并遍历,拿到key,通过key去get值。
    public static void Traversal05(HashMap map){

        //返回时声明了it是Integet类型的迭代器,不用强转
        //Iterator 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);
        }
    }

}

 

 

 

你可能感兴趣的:(Java基础)