map的遍歷通常有幾種吧html
for(Map.Entry<String,String> entry : map.entrySet()){ } Iterator<Map.Entry<String,String>> it = map.entrySet().iterator(); while(it.hasNext()){ }
for(String key : map.keySet()){ } //iterator同上
for(String value : map.valueSet()){ } //iterator同上
從書寫上來看,後兩種要更簡單些;性能
可是考慮下map遍歷的場景:.net
因此keySet和entrySet更常用吧;code
for(Map.Entry<String,String> entry : map.entrySet()){ entry.getKey(); } for(String key : map.keySet()){ map.get(key); }
可是,從性能角度講,推薦使用entrySethtm
由於,keySet拿value的時候又一次遍歷的map,每次取用都多一次開銷,對於大容量的Map來講,性能差別也比較明顯。對象
public V get(Object key) { if (key == null) return getForNullKey(); Entry<K,V> entry = getEntry(key); return null == entry ? null : entry.getValue(); }
final Entry<K,V> getEntry(Object key) { if (size == 0) { return null; } int hash = (key == null) ? 0 : hash(key); for (Entry<K,V> e = table[indexFor(hash, table.length)]; e != null; e = e.next) { Object k; if (e.hash == hash && ((k = e.key) == key || (key != null && key.equals(k)))) return e; } return null; }