zoukankan      html  css  js  c++  java
  • 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(第三个)根据插入顺序排序。

  • 相关阅读:
    Swift
    Swift
    Swift
    Swift
    获取项目版本号与设置引导页的判断条件
    [iOS]简单的APP引导页的实现 (Swift)
    iOS
    文顶顶 iOS开发UI篇—UITabBarController简单介绍 iOS开发UI篇—UITabBarController简单介绍
    Swift开源项目精选
    Fuel 5.1安装openstack I版本号环境
  • 原文地址:https://www.cnblogs.com/pravez/p/12541444.html
Copyright © 2011-2022 走看看