欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

HashMap的2种遍历方式比较,hashmap2种,首先我们准备数据,准备一

来源: javaer 分享于  点击 47794 次 点评:210

HashMap的2种遍历方式比较,hashmap2种,首先我们准备数据,准备一


首先我们准备数据,准备一个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,重复工作不言而喻

相关栏目:

用户点评