我们先来做一个测试
public class HashMapTest { private HashMap<String, String> map = new HashMap<>(); @Before public void beforeAllMethodTestInClass() { for (int i = 0; i < 100000; i++) { map.put("a" + i, "aa" + i); map.put("b" + i, "bb" + i); map.put("c" + i, "cc" + i); map.put("d" + i, "dd" + i); } } @Test public void entrySetTest() { Iterator<Map.Entry<String, String>> it = map.entrySet().iterator(); long startTime = System.currentTimeMillis(); while (it.hasNext()) { Map.Entry<String, String> entry = it.next(); System.out.println(entry.getKey() + "=" + entry.getValue()); } long endTime = System.currentTimeMillis(); System.out.println(endTime - startTime); } @Test public void keySetTest() { Iterator<String> it = map.keySet().iterator(); long startTime = System.currentTimeMillis(); while (it.hasNext()) { String key = it.next(); System.out.println(key + "=" + map.get(key)); } long endTime = System.currentTimeMillis(); System.out.println(endTime - startTime); } }
多次测试,我们可以发现方法keySetTest()时间大约为2s809ms,
而entrySetTest()只有2s98ms,从测试上来说,后者运行时间小于前者。
原来,因为entrySet遍历的时候,存放的是Map.Entry<T, T>类型,
意思是,在进行遍历的时候已经把key、value放入其中。
而keySet遍历的时候,存放的是T类型,
意思是,在进行遍历的时候只放了key值,
倘若我还需要value,就还需要使用 public V get(Object key) 方法
注:本博客旨在记录,不作任何商用,如有侵犯,请联系博主(1258971228@qq.com)删除!
HashMap中推荐使用entrySet方式遍历Map类集合KV而不是keySet方式遍历
原文:https://www.cnblogs.com/uzxin/p/11857450.html