2018-05-08 HashMap和hashtable区别

2018-05-08  本文已影响0人  MiaLing007

相同点:

一: 存储方式相同,利用一个内部类,实现的是Map.Entity接口,内部实现不一样,但是都是以节点方式进行存储的。是一种单向链表,链表是基于数组的。
两者都是散列表,存储形式都是key-value键值对。

不同点:

一,HashMap可以允许key为null,value为null,HashTable都不允许为null
如果key为空时,hashmap会创建一个null的对象,而hashtable则会抛出空指针异常

hashtable的put中代码:
    public synchronized V put(K key, V value) {
    // Make sure the value is not null
    if (value == null) {
        throw new NullPointerException();
    }

hashmap的put中代码:
    public V put(K key, V value) {
        if (key == null)
            return putForNullKey(value);//创建一个nullkey

二,计算hashcode的方法太相同。
hashMap和HashTable它们计算一个对象的hashCode时的方法不一样。HashMap不是直接用对象自己的hashCode,而是自己重新计算一下hashCode,而HashTable直接用对象本上的hashCode

三,继承的类不一样

public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, java.io.Serializable

public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable

四, 同步机制不一样

HashMap没有提供同步机制,是线程不安全的,需要自己在外面写同步代码,HashTable 部分方法上有自己的 synchronize 同步,是线程安全的。

五,HashMap中没有contains()方法。

六, 它们的数组初始化大小和扩容方式不一样,HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。

上一篇下一篇

猜你喜欢

热点阅读