看到你标题了,给你写了个代码,有不懂的留言 public class Person { int age;
@Override public boolean equals(Object obj) { //按照你想要的方法去比较,比如我这里比较的是年龄,年龄相等就返回true if(!(obj instanceof Person)) return false; Person p = (Person)obj; return this.age==p.age?true:false; } public static void main(String[] args) { Person p1 = new Person(); Person p2 = new Person(); p1.age=1; p2.age=1; System.out.println(p1.equals(p2));//如果没有重写equals方法,Object默认是比较他们的引用,所以返回的是false,你可以试试
楼上那个人已经说得不错了。你知道Set这个集合是不能存相同内容的吗?它判断相同内容的依据就是存进去的这个对象与set这个集合里面存在的各个对象的hashcode比较是否相同。如果相同,就存不进去。 我大概写个例子吧 public class Person { int age; String name;
public Person(){} public Person(String name,int age){ this.age = age; this.name=name; }
@Override public boolean equals(Object obj) { System.out.println(this.name+":调用equals,想用什么方式比较自己写"); Person p = (Person)obj; return this.age==p.age?true:false; } @Override public int hashCode() { System.out.println(this.name+":先调用hashCode,想用什么方式比较自己写,若想同,再调用equals"); return age; } public static void main(String[] args) { HashSet<Person> persons = new HashSet<Person>(); Person p1=new Person("a",1); Person p2=new Person("b",1); Person p3=new Person("c",2); persons.add(p1); persons.add(p2); persons.add(p3); for(Person p:persons){ System.out.println(p.age); } }}我比较相同的依据是年龄相同
public class Person {
int age;
@Override
public boolean equals(Object obj) {
//按照你想要的方法去比较,比如我这里比较的是年龄,年龄相等就返回true
if(!(obj instanceof Person))
return false;
Person p = (Person)obj;
return this.age==p.age?true:false;
} public static void main(String[] args) {
Person p1 = new Person();
Person p2 = new Person();
p1.age=1;
p2.age=1;
System.out.println(p1.equals(p2));//如果没有重写equals方法,Object默认是比较他们的引用,所以返回的是false,你可以试试
}
}
2、至于如何重写,这个要具体问题具体对待。
我大概写个例子吧
public class Person {
int age;
String name;
public Person(){}
public Person(String name,int age){
this.age = age;
this.name=name;
}
@Override
public boolean equals(Object obj) {
System.out.println(this.name+":调用equals,想用什么方式比较自己写");
Person p = (Person)obj;
return this.age==p.age?true:false;
}
@Override
public int hashCode() {
System.out.println(this.name+":先调用hashCode,想用什么方式比较自己写,若想同,再调用equals");
return age;
} public static void main(String[] args) {
HashSet<Person> persons = new HashSet<Person>();
Person p1=new Person("a",1);
Person p2=new Person("b",1);
Person p3=new Person("c",2);
persons.add(p1);
persons.add(p2);
persons.add(p3);
for(Person p:persons){
System.out.println(p.age);
}
}}我比较相同的依据是年龄相同
2.Myeclipse(或Eclipse中)快捷键:alt+shift+s 然后再点h就可以帮你自动生成hashcode和equals方法。alt+shift+s再点s会自动帮你生成tostring方法。