zoukankan      html  css  js  c++  java
  • 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 时,此时此索引位置上的所有数据改为用红黑树存储

  • 相关阅读:
    PHP验证码
    c#属性
    框架数据连接类
    mysqli
    C# 委托
    Windows系统,文件和文件夹命名规则:
    固态硬盘与普通硬盘的区别
    windows快捷键
    1.认识计算机
    计算机题解
  • 原文地址:https://www.cnblogs.com/211806210dingziming/p/14434778.html
Copyright © 2011-2022 走看看