2016-07-05 4 views
4

인쇄 할 때 Set에 요소가 2 개만있을 것으로 예상되지만 요소가 3 개 있습니다! 고유성을 정의하려면 어떻게해야합니까?Java의 사용자 정의 클래스 고유 값

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

당신은 인쇄하기 전에 고유성 검사를하지 – Ibu

답변

4

여기에 두 가지 문제

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

결과 :

[11 24, 10 25, 44 25]