HashMap和HashTable源码学习笔记

看了些源码部分后,感觉,这就是数据结构的东西!当时学习数据结构时怎么没有怀着好奇学习的心理。看了arraylist和vector后,就

没有再细看HashMap和HashTable,只是就自己好奇关心的看了下:其数据结构是什么样的?查找和插入怎么进行的?然后网上查阅其区

别并于代码中以验证。
1,两者数据结构相同
   HashMap和HashTable都是一自定义结构体的一维数组(Entry<K,V>[] table),数组中的每个元素再拉出一个列表。
2,查找
  对于给定键值查找,两都都是一样的,对哈希表进行二循环遍历。
  对于给定键查找,两者都是先利用哈希值定位表头的位置(一维数组中的位置),然后再去遍历这个表。不同地方在是在利用哈希值

上,HashMap利用哈希值与一维数组长度相“与”定位表头的位置;HashTable是利用哈希值与“0x7FFFFFFF”相与的结果对一维数组长

度求余来定位表头的位置。(两者对哈希值的计算运用也不同)
3,插入
  这个过程先定位要插入位置表头(同查找过程),然后插入在表的最后边。
4,Hashtable 中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。
5,Hashtable和HashMap扩容的方式
  HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。(添加单个

时以2倍方式resize(2 * table.length);添加多个时,则以2的指数级部数扩容)。
  扩容因子:这个数据结构中学过,但是一时没反应过后来才想起怎么会事。负载因子就是哈希表中要装入的元素和哈希表的容量的比

值。当负载因子大于一定阈值的时候,就应该对哈希表增加表头了(一维数组长度),否则整体上表很长,会有更多冲突影响性能。那

个阈值即称为扩容因子。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值