Java hashcode 理解

Java集合分为List和Set,List允许重复元素存在,而Set不容许重复元素存在,那么在Set中添加新元素的时候是怎么检测重复性的呢?若是用equals ,那效率的很低了,Set中有n个元素,若是添加一个元素,检查是否有和该元素重复的元素,那么须要比较n次,空间复杂度O(n),对于添加一个元素来讲,空间复杂度大了一些。这个时候就须要用到hashcode了,hashcode返回的是经过hash算法的所获得该元素在内存中的地址,若是两个元素hashcode计算出的地址不一样,说明这两个元素的值不一样,可是两个元素hashcode计算出的地址相同,两个元素的值不一同相同那么在该添加元素时候计算出该元素对应的地址,而后检测该地址是否被占用,没有被占用,那么说明集合中没有与之重复的元素,能够插入;若是该地址被占用,这时须要用equals判断两个元素的值是否相等,相等,不容许插入,不相等,为该元素查找可分配的地址。算法

相关文章
相关标签/搜索