去除 Set 集合的重复元素的方法与 equals(),hashCode()方法有关
class Person{
String name;
int age;
public String toString(){
return name+"..."+age;
}
}
public class test1{
public static void main(String[] args){
Set<Person> set=new HashSet<Person>();
set.add(new Person("a",21));
set.add(new Person("b",65));
set.add(new Person("c",23));
set.add(new Person("b",65));
System.out.println(set);
}
当你这样输出的时候,有可能会存在相同的元素存在 Set 集合中,是因为你没有重写 equals() ,hashCode()方法
class Person{
String name;
int age;
public boolean equals(Object o){
if(o==null)
return false;
if(!(o instanceof Person))
return false;
Person p=(Person)o;
return this.name.equals(p.name) && this.age==p.age;
}
public int hashCode(){
return name.hashCode()+age;
}
}
public class test1{
public static void main(String[] args){
Set<Person> set=new HashSet<Person>();
set.add(new Person("a",21));
set.add(new Person("b",65));
set.add(new Person("c",23));
set.add(new Person("b",65));
System.out.println(set);
}
因为你通过 new Person() 写出来的元素都是不同的元素,所以集合会自动认为它是不同的元素。当你重写方法之后相同的元素就会去除