【技术累积】【点】【java】【28】Map遍历

时间:2025-03-29 19:33:44

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

参考文章