遍历HashMap的几种方式以及如何获得Hashmap的key和Value

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);
        }

猜你喜欢

转载自blog.csdn.net/xiaowang_lj/article/details/128504596
今日推荐