HashMap与HashTable的异同点

不同点:

1)继承的类不同
HashTable继承Dictionary
HashMap继承AbstractMap

2)初始数组大小不同
HashTable:11
HashMap:16

3)线程安全问题
HashTable:线程安全
HashMap:非线程安全
HashTable方法是同步的,而HashMap则不是。HashTable中几乎所有的public的方法都是synchronized 的,而有些方法也是在内部通过 synchronized 代码块来实现。

4)扩容的方式不同
HashTable:旧数组的2倍+1
HashMap:旧数组的2倍
HashMap的容量必须是2的指数级大小数据。当初始容量给定时,一般会自动转换成离它最近的一个2的指数的数字,作为它的容量。

5)null值处理不同
HashTable:不允许key与value为null,当用null当做Key的时候会抛出java.lang.NullPointerException异常,因为其在计算Hash的时候调用了key.hashCode();当Key为Null的时候就会抛出异常,而且在put中,并未单独对null进行判断(key不能重复)
HashMap:key可以为null,有且只有一个,value可以由多个为null。

6)hash函数不同
HashTable
private int hash(Object k) {

    // hashSeed will be zero if alternative hashing is disabled.

    return hashSeed ^ k.hashCode();

}

HashMap

final int hash(Object k) {

    int h = hashSeed;

    if (0 != h && k instanceof String) {

        return sun.misc.Hashing.stringHash32((String) k);

    }

    h ^= k.hashCode();

    h ^= (h >>> 20) ^ (h >>> 12);

    return h ^ (h >>> 7) ^ (h >>> 4);

}

7)支持的遍历种类不同

HashMap只支持Iterator(迭代器)遍历。
而Hashtable支持Iterator(迭代器)和Enumeration(枚举器)两种方式遍历

8) contains()方法

Hashtable支持contains(Object value)方法,而且重写了toString()方法;
而HashMap不支持contains(Object value)方法,没有重写toString()方法。
9)效率不同
单线程下HashMap效率比HashTable效率高

相同点:

1.底层均是数组+链表2.扩容时机相同
3.继承:实现map接口,可克隆,序列化
4.重复性:key值都不能重复,value可以重复
5.迭代器都可以使用Iterator

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值