Java中的HashMap的2种遍历方式比较_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Java中的HashMap的2种遍历方式比较

Java中的HashMap的2种遍历方式比较

 2016/5/20 5:33:24  iTommy  程序员俱乐部  我要评论(0)
  • 摘要:首先我们准备数据,准备一个mapMap<String,String>map=newHashMap<String,String>();for(inti=0;i<10;i++){map.put(i+"","value"+i);}然后我们采用传说中的key遍历:步骤:先弄成keyset,然后遍历keyset通过key从map中获取valueIterator<String>iterator=map.keySet().iterator();while
  • 标签:has Map 遍历 Hash Java 方式

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

class="java">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,重复工作不言而喻。

所以使用entrySet的效率更高些,或许很多时候我们都不太注意这些,但是从源码中就可以得到答案了。

?

http://outofmemory.cn/code-snippet/1508/HashMap-2-zhong-bianli-mode-match

发表评论
用户名: 匿名