黑马程序员技术交流社区
标题:
HashSet
[打印本页]
作者:
尹兆国
时间:
2014-6-12 17:56
标题:
HashSet
本帖最后由 尹兆国 于 2014-6-13 01:40 编辑
HashSet是如何保证元素的唯一性的啊
作者:
wyqs92
时间:
2014-6-12 18:10
首先比较哈希值,如果哈希值相同,就用equals方法判断内容是否相同。
作者:
axuan
时间:
2014-6-12 18:16
我的理解:
当HashSet中放入了两个对象后,默认他们的hashCode都是不一样的,因此不需要调用equals方法就能确定这两个对象不是同一个,但是如果这两个对象的值是一样的,这种判断结果就不符合要求了,因此需要重写hashcode方法,将两个对象的hashcode值设为相同,这样就可以进入equals判断阶段,equals方法是继承自object类的,比较的是对象的地址值,所以判断的结果也必定不同,这又不符合要求了,因此也需要重写equals方法。经过改写以上两个方法,可以完成两个对象的比较,只要两个对象的内容(值)相同,就判断为同一个对象,不得重复存储。哈希表就像一个个桶,每个桶都有一个hashcode,只要元素的hashcode相同,equals如果为false,那么这些元素都挂在这个桶里
作者:
wojiaojay
时间:
2014-6-12 18:35
就是通过哈希值和equals比较
作者:
crazystraw
时间:
2014-6-12 19:31
毕老师视频说的很详细啊
作者:
彭飞
时间:
2014-6-12 20:17
犹然记得,当时毕老师的例子
说有2个人,
一个叫李四,年纪20
一个叫张三,年纪40
李四的哈希值刚好是40,张三的哈希值刚好是20 如此以来, 同为60 ,出现重复
最后老师给出一个*37 还是*27 只要保证不越界。
这是高级软件MyEclipse 生成的, 算法就是严谨的多。
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + x;
result = prime * result + y;
return result;
}
复制代码
作者:
雾里看花。
时间:
2014-6-12 20:54
哈希值 :D
作者:
java木
时间:
2014-6-12 20:59
楼主灌水也灌含蓄点可好,嘻嘻我灌水的技术比你好多了
作者:
Emperors
时间:
2014-6-12 23:03
底层是使用hash表实现。
它使用元素的equals与hashCode方法来保证HashSet集合元素的唯一性。
存储对象时,先调用对象的hashCode()方法计算一个哈希值,在集合中查找是否有哈希值相同的对象。
如果没有哈希值相同的对象,直接存入。
如果有哈希值相同的对象,则和哈希值相同的对象进行equals()方法比较。
equals()方法比较结果相同则不存,不同就存入。
往HashSet集合里存储的对象必须正确重写hashCode和equals方法
HashSet存储元素效率非常高
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2