标签:equals table one key details 比较 文章 AMM 性能
map的遍历一般有几种吧
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遍历的场景:
所以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;
    }标签:equals table one key details 比较 文章 AMM 性能
原文地址:https://www.cnblogs.com/andy1202go/p/9876402.html