【技術累積】【點】【java】【28】Map遍歷
阿新 • • 發佈:2018-10-30
兩種 bject amp urn 明顯 for object 一次 keyset
Map遍歷
map的遍歷一般有幾種吧
- 遍歷entrySet
for(Map.Entry<String,String> entry : map.entrySet()){
}
Iterator<Map.Entry<String,String>> it = map.entrySet().iterator();
while(it.hasNext()){
}
- 遍歷keySet
for(String key : map.keySet()){
}
//iterator同上
- 遍歷valueSet
for(String value : map.valueSet()){ } //iterator同上
選擇
從書寫上來看,後兩種要更簡單些;
但是考慮下map遍歷的場景:
- 根據key值拿value
所以keySet和entrySet更經常使用吧;
for(Map.Entry<String,String> entry : map.entrySet()){
entry.getKey();
}
for(String key : map.keySet()){
map.get(key);
}
但是,從性能角度講,推薦使用entrySet
因為,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; }
參考文章
- Map對象中keyset()和entryset()區別
- Map遍歷的keySet()和entrySet()性能差異原因
- Map集合的四種遍歷方式
【技術累積】【點】【java】【28】Map遍歷