• Java-HashMap、LinkedHashMap、TreeMap、Hashtable、ConcurrentHashMap大杂烩比较


    Java 中常见的Map类大概就这些吧,汇总一下,如果漏掉了什么以后再补上。

    线程安全 key排序 内部结构 特性 不足处
    HashMap 不安全 乱序 hash数组+拉链法(红黑树)处理冲突 - 乱序,不安全
    LinkedHashMap 不安全 插入顺序(默认)/访问顺序 hash数组+拉链法(红黑树)处理冲突 每个节点增加before/after指针,实现排序 不安全
    TreeMap 不安全 按key值大小排序 红黑树 使用红黑树实现基于key的排序 速度慢
    Hashtable 安全 乱序 hash数组+拉链法处理冲突 对方法增加synchronized实现线程安全 速度慢
    ConcurrentHashMap 安全 乱序 hash数组+拉链法(红黑树)处理冲突 将hash数组分为数个segment,实现segment间多线程访问,提升效率 不安全
        HashMap<Integer,String > hm = new HashMap<>();
        TreeMap<Integer,String> tm = new TreeMap<>();
        LinkedHashMap<Integer,String> lm = new LinkedHashMap<>();
        hm.put(20,"2");
        hm.put(30,"3");
        hm.put(10,"1");
        hm.put(40,"4");
        for (Map.Entry<Integer,String> e:hm.entrySet())
            System.out.println(e);
        System.out.println();
        tm.put(20,"2");
        tm.put(30,"3");
        tm.put(10,"1");
        tm.put(40,"4");
        for (Map.Entry<Integer,String> e:tm.entrySet())
            System.out.println(e);
        System.out.println();
        lm.put(20,"2");
        lm.put(30,"3");
        lm.put(10,"1");
        lm.put(40,"4");
        for (Map.Entry<Integer,String > e:lm.entrySet())
            System.out.println(e);
    

    运行结果:

    20=2
    40=4
    10=1
    30=3
    
    10=1
    20=2
    30=3
    40=4
    
    20=2
    30=3
    10=1
    40=4
    

    可以看到,HashMap(第一个)输出是乱序的,TreeMap(第二个)根据key值大小排序,LinkedHashMap(第三个)根据插入顺序排序。

  • 相关阅读:
    设计模式之单例模式
    常用正则表达式
    前台页面json格式数据中文显示问号
    关于SpringMVC中静态资源配置问题
    Tomcat 9启动后控制台中文输出乱码问题
    SpringAOP中 order属性问题
    避坑!Mybatis Generator 生成文件的时候错误使用了其它数据库的同名数据表(关于nullCatalogMeansCurrent参数)
    关于JDBC中 Statement 和 PreparedStatement的区别
    关于Class.newInstance()方法被弃用
    Celery
  • 原文地址:https://www.cnblogs.com/pravez/p/12541444.html
Copyright © 2020-2023  润新知