hashtable和hashmap的区别

HashTable 和 HashMap 存在很多的相同点,但是他们还是有几个比较重要的不同点。

第一:我们从他们的定义就可以看出他们的不同,HashTable 基于 Dictionary 类,而 HashMap 是基于 AbstractMap。Dictionary 是什么?它是任何可将键映射到相应值的类的抽象父类,而 AbstractMap 是基于 Map 接口的骨干实现,它以最大限度地减少实现此接口所需的工作。

第二:HashMap 可以允许存在一个为 null 的 key 和任意个为 null 的 value,但是 HashTable 中的 key 和 value 都不允许为 null。如下:

当 HashMap 遇到为 null 的 key 时,它会调用 putForNullKey 方法来进行处理。对于 value 没有进行任何处理,只要是对象都可以。


    if (key == null)
                return putForNullKey(value);

而当 HashTable 遇到 null 时,他会直接抛出 NullPointerException异常信息。


    if (value == null) {
                throw new NullPointerException();
            }

第三:Hashtable 的方法是同步的,而 HashMap 的方法不是。所以有人一般都建议如果是涉及到多线程同步时采用 HashTable,没有涉及就采用 HashMap,但是在 Collections 类中存在一个静态方法: synchronizedMap(),该方法创建了一个线程安全的 Map 对象,并把它作为一个封装的对象来返回,所以通过 Collections 类的 synchronizedMap 方法是可以我们你同步访问潜在的 HashMa

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值