HashMap和Hashtable的比较

相同点

HashMapHashtable都是存储“键值对(key-value)”的散列表,而且都是采用拉链法解决hash冲突的。但是1.8中,hashmap引入了红黑树。Hashtable没有引入红黑树

不同点

1.线程安全性。

   hashmap线程不安全,hashtable是线程安全的,底层对方法进行同步了。

Hashtable中使用Synchronized来修饰方法(锁是对象锁this),这样相当于对整张表进行锁定了,因为多个线程如果通过同一个HashTable对象访问方法,这些方法的锁就是同一个对象,就会造成阻塞。

2.对null的处理不同

HashMap的key、value都可以为null
Hashtable的key、value都不可以为null

3.容量的初始值 和 增加方式都不一样

HashMap默认的容量大小是16;扩容时,每次将容量变为“原始容量x2”。容量是2的幂次
Hashtable默认的容量大小是11;扩容时,每次将容量变为“原始容量x2 + 1”。

加载因子都是0.75f

4.数组初始化时机

hashtable数组的初始化在构造函数中就完成了,构造函数中给数组分配内存空间

hashmap中数组的初始化并不是在构造函数中进行,而是在第一次存入元素的时候进行,也就是在put是进行初始化(会调用resize()方法)

 

5.添加key-value时的hash值算法不同

HashMap添加元素时,是使用自定义的哈希算法。
Hashtable没有自定义哈希算法,而直接采用的key的hashCode()。

posted on 2018-05-23 21:29  夜的第八章  阅读(224)  评论(0编辑  收藏  举报

导航