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; }