从源码解析HashMap与HashTable的不同

主要是总结,毕竟源码大家都有。

相同点:

1.都实现了map接口,查找存放位置时都用来hash值计算
2.hashtable 实现的是map接口,必须要实现的方法是hash和equals方法
3.rehash时,newCapacity的计算方式是一样的
   int newCapacity = (oldCapacity << 1) + 1;


不同点:

1.hashmap继承自AbstractMap  hashtable 继承自Dictionary
2.hashmap允许键值为空,hashtable不允许。在hashmap中value值可以有相同,但是key值不能有相同,相同则覆盖
3.hashmap中与元素读写相关的操作都没有加Synchronize,而hashtable中都加了。即hasnmap是线程不安全的,而hashtable是线程安全的
4.在hashmap的底层是一个数组+多个链表,hashtable是一个数组。
5.hashtable 默认数组的大小是11,重载因子0.75f。在hashmap中,默认大小是1<<4 即16,而最大值是1<<30即2的30次方
6.hash值的计算方式不同。

注意:在hashmap中。键值都可以为空,所以不能用get() ==null 来判断是否含有某个建,因为结果为null可能是没有该键,可能是该键的值为null,
所以在hashmap中要用containsKey()来判断是否存在某个键。


threshold是指rehash的临界值,下面是计算方式

<span style="font-size:18px;"><span style="font-family:Microsoft YaHei;font-size:14px;">threshold = (int)Math.min(newCapacity * loadFactor, MAX_ARRAY_SIZE + 1);</span></span>


好像大概也许就写了这么多,有不对的给我指出来哦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值