返回顶部

收藏

HashMap的2种遍历方式比较

更多

首先我们准备数据,准备一个map

Map<String, String> map = new HashMap<String, String>();  
for (int i = 0; i < 10; i++) {  
    map.put(i + "", "value" + i);  
}  

然后我们采用传说中的key遍历: 步骤:先弄成key set,然后遍历key set 通过key从map中获取value

Iterator<String> iterator = map.keySet().iterator();  
while (iterator.hasNext()) {  
    String key = iterator.next();  
    String val = map.get(key);  
    System.out.println(key + "->" + val);  
}  
System.out.println("*********************");  

然后我们在采用entrySet的方式遍历下: 步骤:先弄成entrySet 然后遍历他,获取key和value

Set<Entry<String, String>> set = map.entrySet();  
Iterator<Entry<String, String>> s = set.iterator();  
while (s.hasNext()) {  
    Entry<String, String> en = s.next();  
    String key = en.getKey();  
    String val = en.getValue();  
    System.out.println(key + "->" + val);  
}  

孰优孰劣? 看JDK源码,对比两种访问方式: 首先看KeySet访问方式:

public Set<K> keySet() {  
if (keySet == null) {  
    keySet = new AbstractSet<K>() {  
    public Iterator<K> iterator() {  
        return new Iterator<K>() {  
        private Iterator<Entry<K,V>> i = entrySet().iterator();  

        public boolean hasNext() {  
            return i.hasNext();  
        }  

        public K next() {  
            return i.next().getKey();  
        }  

        public void remove() {  
            i.remove();  
        }  
                   };  
    }  

    public int size() {  
        return AbstractMap.this.size();  
    }  

    public boolean contains(Object k) {  
        return AbstractMap.this.containsKey(k);  
    }  
    };  
}  
return keySet;  
}  

也就是调用entrySet()从entryset中获取key,也就是说是在entry set的基础上来做的,貌似多次一举 结论: 通过上述代码我们就知道,采用entrySet方式要优于keySet,因为keySet首先要访问entrySet来组建一个keySet,重复工作不言而喻

标签:java,HashMap

收藏

0人收藏

支持

0

反对

0

相关聚客文章
  1. 尖兵 发表 2018-09-04 08:08:08 原 荐 再看ThreadLocal
  2. 博主 发表 2018-09-13 13:15:38 HashMap源码分析
  3. 夕水溪下 发表 2013-04-07 06:16:02 [转]深入理解HashMap
  4. 博主 发表 2016-05-30 12:32:56 四种方法使Map线程安全
  5. yeseng 发表 2018-05-22 13:56:26 Java实现享元模式-Flyweight
  6. root 发表 2015-04-24 10:06:01 Java集合框架之HashMap
  7. xiaoli.he 发表 2018-08-29 10:54:37 golang 多维哈希(map,hashmap)使用心得
  8. 博主 发表 2015-09-18 14:49:45 List与Map的遍历过程中删除元素
  9. 陈皓 发表 2013-05-10 00:12:12 疫苗:Java HashMap的死循环
  10. onetwogoo 发表 2013-05-30 13:31:20 无锁HashMap的原理与实现
  11. 博主 发表 2016-05-09 13:32:54 如何线程安全的使用 HashMap
  12. xiaoli.wang 发表 2018-05-09 15:25:14 死磕Java之聊聊ThreadLocal源码(基于JDK1.8)

发表评论