package Hash;
public class Demo{
int value;
int id;
public Demo(int _id,int _value){
this.id=_id;
this.value=_value;
}
public String toString(){
return "value="+value;
}
public boolean equals(Object o){
Demo d=(Demo)o;
return (d.value==value)?true:false;
}
public int hashCode(){
return id;
}
}
-----------------
package Hash;
import java.util.HashSet;
public class HashCodeTest {
/**
* @param args
*/
public static void main(String[] args) {
HashSet<Demo> set=new HashSet<Demo>();
for(int i=0;i<=3;i++){
set.add(new Demo(i,i));
}
System.out.println(set);
set.add(new Demo(1,1));
System.out.println(set);
System.out.println(set.contains(new Demo(0,0)));
System.out.println(set.add(new Demo(1,1)));
System.out.println(set.add(new Demo(4,4)));
System.out.println(set);
}
}
-----输出结果-------
[value=2, value=1, value=3, value=0]
[value=2, value=1, value=3, value=0]
true
false
true
[value=2, value=4, value=1, value=3, value=0]
public class Demo{
int value;
int id;
public Demo(int _id,int _value){
this.id=_id;
this.value=_value;
}
public String toString(){
return "value="+value;
}
public boolean equals(Object o){
Demo d=(Demo)o;
return (d.value==value)?true:false;
}
public int hashCode(){
return id;
}
}
-----------------
package Hash;
import java.util.HashSet;
public class HashCodeTest {
/**
* @param args
*/
public static void main(String[] args) {
HashSet<Demo> set=new HashSet<Demo>();
for(int i=0;i<=3;i++){
set.add(new Demo(i,i));
}
System.out.println(set);
set.add(new Demo(1,1));
System.out.println(set);
System.out.println(set.contains(new Demo(0,0)));
System.out.println(set.add(new Demo(1,1)));
System.out.println(set.add(new Demo(4,4)));
System.out.println(set);
}
}
-----输出结果-------
[value=2, value=1, value=3, value=0]
[value=2, value=1, value=3, value=0]
true
false
true
[value=2, value=4, value=1, value=3, value=0]
本文通过一个具体的Java示例展示了如何正确实现hashCode和equals方法,特别是在自定义对象用于HashSet等集合时的重要性。文章中详细解释了当hashCode和equals方法被重写时,对象在集合中的行为如何变化。
766

被折叠的 条评论
为什么被折叠?



