java – Hashset的Hashcode和Equals
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – Hashset的Hashcode和Equals,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1901字,纯文字阅读大概需要3分钟。
内容图文
![java – Hashset的Hashcode和Equals](/upload/InfoBanner/zyjiaocheng/714/49dd7a4ffa8a42e6b13d4c1dc26a3b37.jpg)
参见英文答案 > When does HashSet ‘add’ method calls equals? 4个
请澄清我对Hashset的疑问.考虑以下代码,
class Person
{
String name;
Person(String n)
{
name=n;
}
public String getName()
{
return name;
}
@Override
public boolean equals(Object arg0) {
System.out.println("in equals");
Person obj=(Person)arg0;
System.out.println("1st "+getName());
System.out.println("2nd "+obj.getName());
if(this.getName().equals(obj.getName()))
{
return true;
}
return false;
}
@Override
public int hashCode() {
System.out.println("in hash code");
System.out.println(" value is "+Integer.valueOf(name.charAt(0)));
return Integer.valueOf(name.charAt(0));
}
}
在主要我有以下代码
Person obj1=new Person("bcd");
Person obj2=new Person("cde");
Person obj3=new Person("abc");
Person obj4=new Person("abc");
现在,如果我将这些对象添加到hashset
Set<Person> sset=new HashSet<Person>();
sset.add(obj1);
sset.add(obj4);
sset.add(obj2);
sset.add(obj3);
我得到了这个输出
in hash code
value is 98
in hash code
value is 97
in hash code
value is 99
in hash code
value is 97
in equals
1st abc
2nd abc
问题1:为什么equals()函数只被调用一次来检查obj3和obj4?为什么没有检查其余的物体?
问题2:如果答案是因为它们都有相同的哈希码,那么只会调用equals,那么为什么不调用下面的代码
sset.add(obj1);
sset.add(obj4);
sset.add(obj2);
sset.add(obj4);
输出是:
in hash code
value is 98
in hash code
value is 97
in hash code
value is 99
in hash code
value is 97
即使将两个相同的对象添加到具有相同哈希码的哈希集中,它也不会进入equals()方法.
问题3:我迭代了上面的值并打印了内容,但是没有调用hashcode或equals.什么时候它真的有用来覆盖hashcode和equals方法?
问题4:何时调用hashCode()和equals()?
解决方法:
>如果hashCode不同,则无需调用equals.
>如果(obj1 == obj2),则无需调用hashCode.
>不需要hashCode和/或等于迭代 – 你不是在比较对象
>当需要区分对象时.
内容总结
以上是互联网集市为您收集整理的java – Hashset的Hashcode和Equals全部内容,希望文章能够帮你解决java – Hashset的Hashcode和Equals所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。