zoukankan      html  css  js  c++  java
  • 【技术累积】【点】【java】【28】Map遍历

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

    参考文章

  • 相关阅读:
    Java实现线程的三种方法
    java 包和访问权限小结
    Java从外部调用类的私有方法
    find
    sigprocmask
    alerm和pause
    kill和raise
    信号处理中可重入函数调用
    低速系统调用的信号中断
    signal函数
  • 原文地址:https://www.cnblogs.com/andy1202go/p/9876402.html
Copyright © 2011-2022 走看看