基本概念
特点
- 无序、线程不安全
- 线程安全可用Hashtable,实现原理与HashMap类似,内部使用synchronized。高并发推荐使用ConcurrentHashMap
- 需要保持添加顺序可用LinkedHashMap
- 比较相同时,先比较hash在比较equals
JDK 8 的HashMap实现
HashMap是 数组+链表+红黑树(JDK1.8增加了红黑树部分)实现的。
- 当链表长度太长(默认是8时,转为红黑树)
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;