相同点
- 都实现Map、Cloneable接口。
- 内部都采用数据+链表的方式进行存储。
- 都有loadFactory,负载因子(size/capacity),都默认为0.75,当超过这个值,会自动扩容,且index会改变。
不同点
HashMap
- 是线程不安全的,
- HashMap存储时允许键值为空。
- 初始容量为16,扩容方式以 newSize = oldSize *2;
- 计算index方法 index = hash & (table.length -1)
HashTable
- 是线程安全的,大部分方法者有synchronized关键字修饰,但是它是比较早的类,在java 5之后提供了ConcurrentHashMap,可以代替它。
- HashTable 不允许 key value 为null。
- 初始容量为11,扩容方式以 newSize = (oldCapacity << 1) + 1
- 计算index方法 index = (hash & 0x7FFFFFFF) % tab.length