如何在HashSet中只维护不相等的对象

时间:2013-12-04 04:02:11

标签: java

如何删除具有相同状态的对象。

          class Student{
                private int age;
                private String name;

                Student(int age, String name){
                  this.age=age;
                  this.name=name;
               } }

              public class SetTest {
               public static void main(String[] args) {
            Student s1= new Student(15,"abc");
            Student s2= new Student(15,"abc");
            Student s3= new Student(16,"adfc");
            Student s4= new Student(14,"ayuc");

                Set<Student> ss= new HashSet<Student>();
                ss.add(s1); ss.add(s2); ss.add(s3); ss.add(s4);}}

这里 s1和s2 具有相同的状态,因为我正在使用Set,我想只保留一个实例。我该怎么办才能只使用不相等的实例。

2 个答案:

答案 0 :(得分:3)

您需要覆盖Student类中的equals()和hashCode()方法。在这种方法中,您可以定义两个学生平等的意义。

   @Override
   public boolean equals(Object other){
       //code to determine if this student is equal to other

   }

    @Override
    public int hashCode() {
       //code to generate a hashCode for the student
    }

请注意此question中的建议。

答案 1 :(得分:1)

您需要覆盖equals()课程中的hashCode()Student方法。

class Student {
    ...
    @Override
    public boolean equals(Object obj) {
        // Your own logic
        // return super.equals(obj); // default
    }

    @Override
    public int hashCode() {
        // Your own logic
        // return super.hashCode(); // default
    }
}