(5)HashMap与HashTable区别

HashMap与HashTable区别

1.出现时间

HashTable产生于JDK 1.1,而HashMap产生于JDK 1.2。
HashMap要比HashTable出现得晚一些。

2.继承接口不同

hashmap源码为:

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

hashtable源码为:

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

3.初始化大小不同

底层数据结构相同
HashTable:大小为11,加载因子为0.75

public Hashtable(int initialCapacity, float loadFactor) {
        if (initialCapacity <= 0) initialCapacity = 11;
        if (loadFactor <= 0.0) loadFactor = 0.75f;
        this.loadFactor = loadFactor;
    }
    public Hashtable(int initialCapacity) {
        this(initialCapacity, 0.75f);
    }

HashMap:大小为16,加载因子为0.75

 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; 
 static final float DEFAULT_LOAD_FACTOR = 0.75f;

4.对null值得处理不同

HashMap:HashMap是支持null键和null值的

 if (key == null)
            return putForNullKey(value);
HashTable:HashTable在遇到null时,会抛NullPointerException异常
 if (value == null) 
throw new NullPointerException();

5.扩容不同

HashMap:2倍扩容

void addEntry(int hash, K key, V value, int bucketIndex) {
        if ((size >= threshold) && (null != table[bucketIndex])) {
            resize(2 * table.length);
            hash = (null != key) ? hash(key) : 0;
            bucketIndex = indexFor(hash, table.length);
        }

        createEntry(hash, key, value, bucketIndex);
    }

HashTable:扩容大小为二倍加1

 int newCapacity = oldCapacity * 2 + 1;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值