对象重复是指对象里面的变量的值都相等,并不定是地址java
public class Student { 02. 03.public String id; 04.public String name; 05.public Student() { 06.} 07.public Student(String id,String name) { 08.this.id = id; 09.this.name = name; 10.} 11.public String getId() { 12.return id; 13.} 14.public void setId(String id) { 15.this.id = id; 16.} 17.public String getName() { 18.return name; 19.} 20.public void setName(String name) { 21.this.name = name; 22.} 23.@Override 24.public boolean equals(Object obj) { 25.Student s=(Student)obj; 26.return id.equals(s.id) && name.equals(s.name); 27.} 28.@Override 29.public int hashCode() { 30.String in = id + name; 31.return in.hashCode(); 32.} 33.}
import java.util.ArrayList; 02.import java.util.HashSet; 03.import java.util.List; 04.import java.util.Set; 05. 06.public class QuSame { 07. 08. public static void main(String[] args) { 09. List<Student> stu = new ArrayList<Student>(); 10. stu.add(new Student("1","yi")); 11. stu.add(new Student("3","san")); 12. stu.add(new Student("3","san")); 13. stu.add(new Student("2","er")); 14. stu.add(new Student("2","er")); 15. //set集合保存的是引用不一样地址的对象 16. Set<Student> ts = new HashSet<Student>(); 17. ts.addAll(stu); 18. 19. for (Student student : ts) { 20. System.out.println(student.getId()+"-"+student.getName()); 21. } 22. } 23.}
list集合存储的类型是基础类型还比较好办,直接把list集合转换成set集合就会自动去除。 当set集合存储的是对象类型时,须要在对象的实体类里面重写public boolean equals(Object obj) {} 和 public int hashCode() {} 两个方法。ide