1、

  HashMap ConcurrentHashMap Hashtable
实现 jdk7数组+链表;
jdk8数组+链表(小于8)+红黑树(大于8)
jdk7数组+链表;
jdk8数组+链表(小于8)+红黑树(大于8)
数组+链表
线程安全 ×
  jdk7桶锁;jdk8行级锁 全局锁
性能
KV K/V均可为null
get(K)返回null不能说明K键不存在
K/V不可为null K/V不可为null
其他 转化为同步:
 Collections.synchronizeMap(hashMap);
  废弃

 

2、HashMap实现原理

jdk7:数组+链表

jdk8:(size<8)数组+链表;(size>8)数组+红黑树

HashMap、ConcurrentHashMap相关内容

HashMap、ConcurrentHashMap相关内容

3、获取数组下标

对key的hash值再进行hash处理,h&(length-1)实质是截取h的后几位,保证了下标不发生数组越界。

HashMap、ConcurrentHashMap相关内容

数组扩容

默认大小16,每次扩容变为原来的两倍。

保证数组的长度为2的n次方,则length-1的二进制形式为011111111,h&(length-1)就能完整的取到h的后几位,反过来看,如果length-1的后面某一位为0,则h&(length-1)的该位置永远为0,即数组中部分下标无法到达,永远都是空的。

相关文章:

  • 2021-09-11
  • 2021-08-24
  • 2021-12-18
  • 2021-04-05
  • 2021-09-13
  • 2021-09-28
  • 2021-07-02
猜你喜欢
  • 2021-11-26
  • 2022-12-23
  • 2021-12-21
  • 2021-08-20
  • 2021-07-22
  • 2021-06-24
  • 2021-06-26
相关资源
相似解决方案