java 关于集合Set接口的实现类中 元素相等的问题

问题描述:

java 关于集合Set接口的实现类中 元素相等的问题
Set中的hashCode是否是用来确定元素在集中位置的东西?如果是的话,为什么不能单凭equal()方法检验两个元素是否相同呢?Set集中不是不能含有相同元素吗?
1个回答 分类:综合 2014-12-05

问题解答:

我来补答
HashSet确实是靠hashcode来运算出这个元素应该存放在什么地方.
但是不同的对象,hashcode也可能会相同.
这时就发生了冲突,需要再次比较发生冲突的两个或多个元素是否相同(通过equals方法).
如果相同添加失败,如果不同添加成功.
为什么不直接用equals比较是否相同?
因为不知道该跟哪个元素比较啊,难不成遍历整个Set来比较?
如果有一万个元素呢,那么将会很费时间.
而先算出hashcode在比较有个好处.
只要hashcode不同,则可以确定元素不同.只有hashcode相同的情况下,元素才有可能相同.
hashcode的性质:
如果两个元素相同,那么其hashcode必定相同.
如果两个元素不同,那么不要求其hashcode一定不同.(但是如果不同的元素尽量能返回不同的hashcode,那么将有助于提高HashSet的性能)
 
 
展开全文阅读
剩余:2000
上一页:第9题老师
下一页:jst