2016-07-05 23 views
4

Ich erwarte nur 2 Elemente in meinem Set, aber ich erhalte 3 Elemente beim Drucken! Wie kann ich Einzigartigkeit definieren?Einzigartige Werte der benutzerdefinierten Klasse in Java Set

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); 
    } 
} 
+0

Sie nie auf Eindeutigkeit vor dem Druck getestet – Ibu

Antwort

4

Es gibt zwei Probleme hier

  • equals sollte klein geschrieben werden und akzeptieren eine Object
  • Sie haben hashCode auch

Der modifizierte Code zu überschreiben könnte wie folgt aussehen. Beachten Sie, dass die Implementierung bei weitem nicht perfekt ist, wie in equals sollten Sie nach Null überprüfen und ob ein Typcast möglich ist etc. Auch hashCode ist nur ein Beispiel, aber wie solche Dinge implementiert werden, ist ein anderes Thema.

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); 
    } 
} 

Ergebnis:

[11 24, 10 25, 44 25]