码迷,mamicode.com
首页 > 其他好文 > 详细

HashMap

时间:2020-06-08 10:57:16      阅读:65      评论:0      收藏:0      [点我收藏+]

标签:方法   公式   shc   pac   ati   因此   机制   equal   strong   

  • 数组和链表组合构成
  • hash code 相等的value存入链表
  • size/capacity >0.75 时 会扩容,长度是原数组的2倍
  • Hash的公式---> index = HashCode(Key) & (Length - 1)
  • 扩容后,原来的数组成员会根据公式重新分配index. JAVA8之前链表采用前插,在多线程的情况下容易引起死循环。JAVA8之后采用了后插方式避免死循环。但是JAVA8之后由于put和get均为加锁因此仍然不是线程安全的
  • Hash的公式利用位运算代替取模提高效率X % 2^n = X & (2^n – 1)
  • 初始容量16,应该是个经验值
  • 重写equals方法需要重写hashCode
  • 线程不安全的替代方案
  1. Collections.synchronizedMap(Map)
  2. Hashtable
  3. ConcurrentHashMap

一般使用ConcurrentHashMap,前二者因为在所有操作上加锁效率都比较差.

Hashtable 不允许键或值为 null 的,HashMap 的键值则都可以为 null。

Hashtable使用的是安全失败机制(fail-safe),这种机制会使此次读到的数据不一定是最新的数据。HashMap使用fail-fast.

ConcurrentHashMap由Segment 数组、HashEntry 组成.Segment 包含HashEntry,并 使用volatile修饰。

 

HashMap

标签:方法   公式   shc   pac   ati   因此   机制   equal   strong   

原文地址:https://www.cnblogs.com/leonworld/p/12973935.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!