HashTable底层实现原理及和ConcurrentHashM

作者: 迦叶_金色的人生_荣耀而又辉煌 | 来源:发表于2021-01-04 07:24 被阅读0次

    上一篇 <<<HashSet集合底层实现原理
    下一篇 >>>


    HashTable底层结构

    Hashtable 底层使用Entry链表数组存储,Entry自身是单向链表
    属性:
    final int hash;
    final K key;
    V value;
    Entry<K,V> next;

    HashTable初始化

    初始容量:11
    负载因子:0.75f
    阈值:(int)11*0.75=8

    HashTable数据添加【使用了全局锁synchronized】

    a、如果传入的key为空,则报错
    b、计算hash,找到下标,如果key存在,则更新返回
    c、添加节点信息
    c1、如果数量大于阈值,则扩容
    c11、扩容
    新容量:newCapacity = (oldCapacity << 1) + 1;--老的2倍+1
    从尾部往前倒,插入到新的数组中
    c12、重新计算当前节点下标
    c2、使用头插法插入节点信息

    HashTable和ConcurrentHashMap区别

    HashTable线程是安全的,底层采用synchronized把整个table锁住解决了线程安全的问题,但这样多线程最终变为单线程在执行;效率非常低;


    ConcurrentHashMap是HashTable的扩展,解决了线程安全和多线程的效率问题,但是无法扩容。它其实是默认分成16个不同的小的hashTable,然后在通过一些计算方式在多线程的情况下让每个键值对到不同的hashTTable存放,从而能够体现多线程的效率问题,也能够保证线程安全的问题;
    也叫分段锁机制。


    相关文章

      网友评论

        本文标题:HashTable底层实现原理及和ConcurrentHashM

        本文链接:https://www.haomeiwen.com/subject/mbymnktx.html