hashmap选择红黑树,为啥hashmap不直接采用红黑树,为什么达到8个才转红黑树

  1. 为什么直接采用红黑树
    因为红黑树需要进行左旋,右旋操作, 而单链表不需要,
    主要考察链表和红黑树对比:
    1)如果元素小于8个,查询成本高,新增成本低
    2)如果元素大于8个,查询成本低,新增成本高

  2. HashMap在jdk1.8之后引入了红黑树的概念,为什么采用6和8进行红黑树和链表转化

    表示若桶中链表元素超过8时,会自动转化成红黑树若桶中元素小于等于6时,树结构还原成链表形式
    1)原因:
      红黑树的平均查找长度是log(n),长度为8,查找长度为log(8)=3链表的平均查找长度为n/2,当长度为8时,平均查找长度为8/2=4,这才有转换成树的必要;链表长度如果是小于等于6,6/2=3,虽然速度也很快的,但是转化为树结构和生成树的时间并不会太短。

    2)选择6和8的原因是:
      中间有个差值7可以防止链表和树之间频繁的转换。假设一下,如果设计成链表个数超过8则链表转换成树结构,链表个数小于8则树结构转换成链表,如果一个HashMap不停的插入、删除元素,链表个数在8左右徘徊,就会频繁的发生树转链表、链表转树,效率会很低。

    原文作者:宁为百夫长
    原文地址: https://blog.csdn.net/qshuangshuang/article/details/106789930
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞