美文网首页
Java基础 (23) HashMap

Java基础 (23) HashMap

作者: perry_Fan | 来源:发表于2019-02-20 21:37 被阅读0次

1)HashMap的实现原理
2)ConcurrentHashMap的实现原理
3)TreeMap 具体实现
4)LinkedHashMap

数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端。



在HashMap(Java 8以前):数组+链表



在HashMap(Java 8 及以后):数组+链表+红黑树

resize方法中的元素为Node。

HashMap:put方法逻辑
1、如果HashMap未被初始化过,初始化
2、对Key求Hash值,然后再计算下标
3、如果没有碰撞,直接放入桶中
4、如果碰撞了,以链表的方式链接到后面
5、如果链表长度超过阈值,就把链表转成红黑树
6、如果链表长度低于6,就把红黑树转会链表
7、如果节点已经存在了就替换旧值
8、如果桶满了(容量16*加载因子0.75),就需要resize(扩容2倍后重排)

HashMap:从获取hash到散列的过程。



扩容问题

  • 多线程环境下,调整大小会存在条件竞争,容易造成死锁
  • rehashing 是一个比较耗时的过程

HashMap总结

  • 成员变量:数据结构,树化阈值
  • 构造函数:延迟构建
  • put和get的流程
  • 哈希算法,扩容,性能

同步方式

如何优化HashTable?

  • 通过锁细粒度化,将整锁拆解成多个锁进行优化




    ConcurrentHashMap


相关文章

网友评论

      本文标题:Java基础 (23) HashMap

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