HashMap与HashTable的区别?

相同点

  • 都实现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

你可能感兴趣的:(HashMap与HashTable的区别?)