基本概念

特点

  • 无序、线程不安全
  • 线程安全可用Hashtable,实现原理与HashMap类似,内部使用synchronized。高并发推荐使用ConcurrentHashMap
  • 需要保持添加顺序可用LinkedHashMap
  • 比较相同时,先比较hash在比较equals

JDK 8 的HashMap实现

HashMap是 数组+链表+红黑树(JDK1.8增加了红黑树部分)实现的。

  • 当链表长度太长(默认是8时,转为红黑树)

【源码剖析】HashMap

JDK1.7的HashMap实现

HashMap的扩展:

  • 默认分配的大小为16
  • 并不是size大于16就会拓展,下次拓展与threshold(阈值)有关
  • threshold等于table.length乘loadFactor(负载因子)。如table.length为16,loadFactor为0.75,则thredshold为12
  • 扩展策略是乘2

内部组成(Java 8)

  • transient Node<K,V>[] table;
  • transient int size;
  • int threshold;
  • final float loadFactor;

源码剖析

相关文章: