`

HashMap

 
阅读更多
hashmap是用对象的hash值来作为快速存取对象的map实现(hashset底层也是用的hashmap),jdk的hashmap实现中结构大致是这样的:
每个hash值都对应数组(底层数组)中的一个元素,每个数组元素是一个entry(entry其实是一个链表,记录着hash值相同的一组entry(key,value))。
在说明如何查找元素前有2个方法要说下:hashcode & equals (所有的对象都有这2个方法)

先看存储:
当要put(key,value)时,hashmap 会先计算一个key对象的hashcode(调用该对象的hashcode),然后用计算过的hash值作为底层数组中的位置/下标。如果冲突的话,还要重置整个底层数组来适应新加入的这个元素(也就是说数组长度不够了~);否则就将这个entry(key,value)放入那个位置(那个位置如果当前没有元素就直接放入,否则就会加入到那个位置的链表中去)。

在看查找:
和put一个样,get也是先计算hash值来定位查找底层数组中key的位置,然后再使用equals来比较该位置的链表中的所有对象后返回相同的。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics