美文网首页
2018-05-08 HashMap和hashtable区别

2018-05-08 HashMap和hashtable区别

作者: MiaLing007 | 来源:发表于2018-05-08 15:06 被阅读0次

    相同点:

    一: 存储方式相同,利用一个内部类,实现的是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的指数。

    相关文章

      网友评论

          本文标题:2018-05-08 HashMap和hashtable区别

          本文链接:https://www.haomeiwen.com/subject/tbxwrftx.html