HashMap
概念
- HashMap是非线程安全的
- HashMap要比 HashTable 效率高一点
- HashMap中Null可以作为键,这样的键只有一个,可多个键对应的值为Null
- HashMap不指定初始值时,默认初始化大小为16,每次扩充为原来2倍
- HashMap 如给定了初始值,会将其扩充为2的幂次方大小
- JDK1.8 以后的HashMap在解决哈希冲突时有了较大的变化,当链表长度大于阈值8时,将链表转化为红黑树,以减少搜索时间
Hashtable
概念
- HashTable是线程安全的
- HashTable内部的方法基本都经过synchronized 修饰
- HashTable基本被淘汰,尽量不要在代码中使用它
- HashTable中Put进的键值只要有一个Null,直接抛出 NullPointerException
- Hashtable不指定初始值默认初始大小为11,之后每次扩充容量变为原来的2n+1
- Hashtable如给定了容量初始值,Hashtable 会直接使用你给定的大小