• JDK7、8 HashMap底层实现区别


    HashMap的底层实现机制

    HashMap一直是Java开发人员面试常考题,涉及到数据结构,比较考察基本功,本文对于jdk8jdk7的HashMap源码区别做出简单整理

    HashMap底层的几个属性说明

    jdk1.7、1.8共有的属性

    DEFAULT_INNITIAL_CAPACITY:HashMap的默认容量:16

    DEFAULT_LOAD_FACTOR: HashMap的默认加载因子:0.75

    threshold:扩容的临界值:= 默认容量DEFAULT_INNITIAL_CAPACITY * 默认加载因子DEFAULT_LOAD_FACTOR = 12


    jdk1.8特有的属性,涉及到转红黑树

    TREEIFY_THRESHOLD:Bucket中链表长度大于该默认值,转为红黑树:8

    MIN_TREEIFY_CAPACITY :桶中的Node被树化时最小的hash表的容量:64

    JDK1.8及1.7中HashMap的实现区别(以JDK1.8源码为例)

    1.相较于jdk1.7, JDK1.8中HashMap的初始化并没有直接创建了长度为16的数组,而是只是赋予了默认的加载因子

    2.jdk1.8 底层的数组是Node[],而jdk1.7底层的数组是Entry[]

    final int hash;
    final K key;
    V value;
    Node<K,V> next;
    

    3.jdk1.8在首次调用put()方法时,底层才创建长度为16的数组,而jdk1.7在调用构造器时就创建了长度为16的数组

    4.jdk1.8的底层数据结构:数组+链表+红黑树,jdk1.7底层数据结构:数组+链表

    5.当形成链表时,jdk7 新元素放在数组,指向原链表,jkd8 新元素放在链表最后

    jdk8

    jdk7

    6.当数组的某一个索引上的元素以链表形式存在的数据个数 > 8 且数组的长度 > 64 时,此时此索引位置上的所有数据改为用红黑树存储

  • 相关阅读:
    Myeclipse修改jdk版本流程
    web框架的前生 socket写网站
    jmeter APP接口压力测试
    BeanShell实现加密解密功能
    jmeter BeanShell的几种使用方式
    jmeter多个接口测试
    jenkins添加TPS与服务器监控变化曲线图
    Jenkins的HTML报告增加显示Throughput展示
    Jmeter 分布式部署-远程服务器的搭建与设置
    Jenkins+Jmeter配置(Linux环境)
  • 原文地址:https://www.cnblogs.com/211806210dingziming/p/14434778.html
Copyright © 2020-2023  润新知