HashMap与HashTable的区别

1 线程安全方面  HashMap是非线程安全的,HashTable是线程安全的

2 初始化容量     HashMap的初始化容量是 16,HashTable的初始化容量是 11,两者的扩容因子都是0.75

3 扩容方式       HashMap扩容时是当前容量翻倍 即 capacity*2,HashTable扩容时是当前容量翻倍+1 即 capacity*2+1

4 底层结构      HashMap与HashTable的底层实现都是数组+链表(单向)结构实现

5 HashMap 继承了AbstractMap,HashTable继承了Dictionary抽象类,两者均实现Map接口

6 哈希算法

HashTable计算hash是直接使用key的hashcode对table数组的长度直接进行取模:

  int hash=key.hashCode();

  int index=(hash & 0x7FFFFFFF) % tab.length

HashMap计算hash对key的hashCode进行了二次hash,以获得更好的散列值,然后对table数组长度取模

static in hash(int h){
    h ^=(h >>> 20) ^(h >>>12);
   return h^(h>>>7)^(h>>>4);
}
static int indexFor(int h,int length){
  return h& (length-1);
}

 

posted on 2018-11-08 11:42  anqli_java  阅读(156)  评论(0编辑  收藏  举报