hashMap的2中遍历方式比较

来源:互联网 发布:网络传销一般崩盘时间 编辑:程序博客网 时间:2024/04/19 16:41

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

Java代码 复制代码 收藏代码
  1. Map<String, String> map = new HashMap<String, String>(); 
  2. for (int i =0; i < 10; i++) { 
  3.     map.put(i + "", "value" + i); 

然后我们采用传说中的key遍历:

步骤:先弄成key set,然后遍历key set 通过key从map中获取value

Java代码 复制代码 收藏代码
  1. Iterator<String> iterator = map.keySet().iterator(); 
  2. while (iterator.hasNext()) { 
  3.     String key = iterator.next(); 
  4.     String val = map.get(key); 
  5.     System.out.println(key + "->" + val); 
  6. System.out.println("*********************"); 

然后我们在采用entrySet的方式遍历下:

步骤:先弄成entrySet 然后遍历他,获取key和value

Java代码 复制代码 收藏代码
  1. Set<Entry<String, String>> set = map.entrySet(); 
  2. Iterator<Entry<String, String>> s = set.iterator(); 
  3. while (s.hasNext()) { 
  4.     Entry<String, String> en = s.next(); 
  5.     String key = en.getKey(); 
  6.     String val = en.getValue(); 
  7.     System.out.println(key + "->" + val); 

孰优孰劣?

看JDK源码,对比两种访问方式:

首先看KeySet访问方式:

Java代码 复制代码 收藏代码
  1.    public Set<K> keySet() { 
  2. if (keySet == null) { 
  3.     keySet = new AbstractSet<K>() { 
  4.     public Iterator<K> iterator() { 
  5.         return new Iterator<K>() { 
  6.         private Iterator<Entry<K,V>> i = entrySet().iterator(); 
  7.  
  8.         public boolean hasNext() { 
  9.             return i.hasNext(); 
  10.         } 
  11.  
  12.         public K next() { 
  13.             return i.next().getKey(); 
  14.         } 
  15.  
  16.         public void remove() { 
  17.             i.remove(); 
  18.         } 
  19.                    }; 
  20.     } 
  21.  
  22.     public int size() { 
  23.         return AbstractMap.this.size(); 
  24.     } 
  25.  
  26.     public boolean contains(Object k) { 
  27.         return AbstractMap.this.containsKey(k); 
  28.     } 
  29.     }; 
  30. return keySet; 
  31.    } 

也就是调用entrySet()从entryset中获取key,也就是说是在entry set的基础上来做的,貌似多次一举

结论:

通过上述代码我们就知道,采用entrySet方式要优于keySet,因为keySet首先要访问entrySet来组建一个keySet,重复工作不言而喻
原创粉丝点击