Java Set中自定义类的唯一值

omi*_*ami 5 java set hashset

我期望只有2个元素,Set但我在打印时会收到3个元素!我怎样才能定义唯一性?

public class test {

    public static void main(String[] args) {

        class bin {
            int a;
            int b;
            bin (int a, int b){
                this.a=a;
                this.b=b;
            }
            public boolean Equals(bin me) {
                if(this.a==me.a && this.b==me.b)
                    return true;
                else 
                    return false;
            }   
            @Override
            public String toString() {
                return a+" "+b;
            }
        }

        Set<bin> q= new HashSet<bin>();
        q.add(new bin(11,23));
        q.add(new bin(11,23));
        q.add(new bin(44,25));

        System.out.println(q);
    }
}
Run Code Online (Sandbox Code Playgroud)

DAX*_*lic 5

这里有两个问题

  • equals 应小写并接受 Object
  • 你必须重写hashCode以及

修改后的代码如下所示.请注意,实现远非完美,因为equals您应检查null以及是否可以进行类型转换等.此外hashCode只是一个示例,但如何实现此类事情是另一个主题.

import java.util.Set;
import java.util.HashSet;

public class test {

    public static void main(String[] args) {

        class bin{
            int a;
            int b;
            bin (int a, int b){
                this.a=a;
                this.b=b;
            }

            @Override
            public boolean equals(Object me) {
                bin binMe = (bin)me;
                if(this.a==binMe.a && this.b==binMe.b)
                    return true;
                else 
                    return false;
            }   

            @Override
            public int hashCode() {
                return this.a + this.b;
            }

            @Override
            public String toString() {
                return a+" "+b;
            }
        }

        Set<bin> q= new HashSet<bin>();
        q.add(new bin(11,24));
        q.add(new bin(11,24));
        q.add(new bin(10,25));
        q.add(new bin(44,25));

        System.out.println(q);
    }
}
Run Code Online (Sandbox Code Playgroud)

结果:

[11 24,10 25,44 25]