zoukankan      html  css  js  c++  java
  • HashMap 和HashTable的区别?底层实现是什么?

        HashMap 和HashTable的区别?底层实现是什么?

        

        区别:

        (1)HashMap方法没有synchroized修饰,线程非安全,HashTable线程安全

        (2)HashMap允许key和value为null,而HashTable不允许

        

      2 底层实现:数组+链表实现

      jkd8开始链表高度到8,数组长度超过64,链表转变为红黑树,元素以内部类Node节点存在

        1)计算key的hash值,二次hash然后对数组长度取模,对应到数组下标。  

        2)如果没有产生hash冲突,则直接创建node存入数组

        3)如果产生hash冲突,先进行equal比较,相同则取代钙元素,不同,则判断链表高度插入链表,链表

        高度达到8,并且数组长度达到64则转变为红黑树,长度低于6则将红黑树转回链表。

        4)key为null,存在小标为0的位置。

        示例解释:当创建一个hashMap,往里面存储第一个在值时,计算出hash值,发现此节点并没有值,

    则可以直接放入,此时还是数组,然后不停放入值,但是当产生hash冲突的时候,比如下标是0的位置,两个值

    计算得到的hashcode都是指向这个位置,则使用equals判断是否相同,相同则替代,不同则将此位置所存储的hashcode相同的两个值做成链表存储到此位置,然后当此位置存储的值超过8个,则查询效率会低,所以转化为红黑树,加快查询速度。

        数组在长度满的时候会自动扩容。加载因子是0.75。

        链表转为红黑树的阈值是8。

      

      

      

  • 相关阅读:
    LightOJ1031 Easy Game(区间DP)
    POJ1325 Machine Schedule(二分图最小点覆盖集)
    ZOJ1654 Place the Robots(二分图最大匹配)
    LightOJ1025 The Specials Menu(区间DP)
    POJ2288 Islands and Bridges(TSP:状压DP)
    LightOJ1021 Painful Bases(状压DP)
    LightOJ1013 Love Calculator(DP)
    POJ1780 Code(欧拉路径)
    POJ1201 Intervals(差分约束系统)
    ZOJ2770 Burn the Linked Camp(差分约束系统)
  • 原文地址:https://www.cnblogs.com/hrlizhi/p/14634921.html
Copyright © 2011-2022 走看看