2014-10-18 1 views
0

두 개의 arrayLists<myObject>이 있습니다. 여기에서 myObject은 내가 만든 사용자 지정 클래스의 개체입니다. equals() 메서드를 사용하여 해당 arrayLists를 비교할 수 있기를 원합니다.두 개의 arrayList <myObject>이 있는데,이를 올바르게 비교할 수 있도록 equals()를 사용할 수 없습니다. 왜?

답변을 읽고 답한 후 int[]과 같은 특정 개체는 동일한 것을 참조 할 때 equals() 메서드로만 간주됩니다.

수정하려면 내 사용자 지정 개체에서 equals 메서드를 재정의했습니다. 내 객체는 3 개의 속성 (모든 기본 유형)을 가지므로, my equals 메소드는 이제 모든 3 개의 속성이 비교 된 객체의 속성과 같으면 true을 반환하고 그렇지 않으면 false를 반환합니다. 그러나 arraylists를 비교하는 것은 여전히 ​​효과가 없습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

코드를 게시하는 대신 실례합니다. 변수 및 이름이 영어가 아니기 때문에 설명합니다.

편집 : 여기 코드가 있습니다. Compra은 내 맞춤 클래스입니다. cantidad, conceptoid이 해당 속성입니다. 당신이 코드를 게시하지 않은 것처럼

@Override 
    public boolean equals(Object obj) { 
     boolean result = true; 

     if (obj == null) { 
      result = false; 
     }else{ 
      Compra comprobada = (Compra) obj; 
     if(!(this.id == comprobada.getId())){ 
     result = false; 
     } 
     if(!(this.cantidad == comprobada.getCantidad())){ 
     result = false; 
     } if(!this.concepto.equals(comprobada.getConcepto())){ 
     result = false; 
     } 

     } 
     return result; 

    } 
+0

"여전히 작동하지 않는다"는 것을 의미합니까? 코드 게시, 예상 작업 및 실제로 수행 할 작업을 게시하십시오. –

+0

영어 변수가 걱정된다면 문제를 나타내는 SSCCE *를 영어로 쓰십시오. 귀하의 서면 설명만으로 우리를 도와 줄 수는 없습니다. –

+0

@StephenCI가 질문을 업데이트하여 일부 코드를 포함 시켰습니다. 그것은 저의 equals 메소드입니다. 객체로 구성된 두 명의 arraylists를 비교하려고 시도하지만 결과가 틀렸을 때 결과는 false입니다. – kace91

답변

0

는 난 당신이 Comparable class 및 방법 compareTo 방법과 사용자 정의 클래스를 사용하는 방법으로 확인하는 것이 좋습니다. 을 바탕으로

1

이 하나 : 당신이 사용자 정의 개체가 올바른 동일 구현 한 경우 How can I check if two ArrayList differ, I don't care what's changed

는 (당신은 실제로 그것을 무시하고 당신의 일을 가지고)과의 ArrayList의 크기는 동일하고, 한 쌍의 각이다 객체가 같으면 똑같은 값을 반환합니다. 즉, 당신이하려고하는 것은 완전히 정확하지만 arrayLists는 정확히 정확한 객체 인에 정확히 같은 객체를 가지고 있지 않습니다.

System.out.println()을 수행하여 콜렉션 동일성을 검사 할 때 equal이 호출되는지 확인하십시오. 마음에 드시면 개체의 동등 함을 보내주십시오.

격리 된 예제에서 코드를 실행하고 올바르게 작동합니다 (outtputs true). equals 메서드가 개선되어 많은 수의 작업을 수행하지 않으므로 하나만 같지 않으면 false를 반환해야합니다.

class stackoverflow { 
    public static void main(String args[]){ 
     ArrayList<Compra> array1 = new ArrayList<>(); 
     ArrayList<Compra> array2 = new ArrayList<>(); 
     array1.add(new Compra(1,2,"test")); 
     array2.add(new Compra(1,2,"test")); 
     System.out.println(array1.equals(array2)); 
    } 
} 
class Compra { 
    int id; 
    int cantidad; 
    String concepto; 

    public Compra(int id, int cantidad, String concepto){ 
     this.id = id; 
     this.cantidad = cantidad; 
     this.concepto = concepto; 
    } 



    public boolean equals(Object obj) { 


     if (obj == null) { 
      return false; 
     }else{ 
      Compra comprobada = (Compra) obj; 
      if(!(this.id == comprobada.getId())){ 
        return false; 
      } 
      if(!(this.cantidad == comprobada.getCantidad())){ 
        return false; 
      } 
      if(!this.concepto.equals(comprobada.getConcepto())){ 
        return false; 
      } 

     } 
     return true; 
    } 



    public int getId() { 
     return id; 
    } 




    public int getCantidad() { 
     return cantidad; 
    } 




    public String getConcepto() { 
     return concepto; 
    } 


} 

어떤 것들은

확인 사항 :
  • 당신이 등호가 있는지 확인하기 위해 인쇄 수행

    • 는 당신에게 당신이? ArrayList에있는 사물의 순서를 변경하지 않겠 수표는 예상대로 true 또는 false를 반환합니다.
    • concepto 문자열이 정확히 같고 대소 문자가 같고 여분의 공백이 들어 있지 않습니까?
  • +0

    안녕하세요, 코드 작성 및 시험에 시간을내어 주셔서 감사합니다. 비교할 때 여전히 오류가 발생합니다. 두 파일을 두 번 읽음으로써 두 배열이 같기 때문에 두 배열이 같다고 확신합니다. 내가 뭔가를 놓친 경우를 대비하여 모든 것을 디버깅하고 있습니다. – kace91

    +0

    어떤 오류가 있습니까? 다른 유형의 객체를 전달하고있는 것입니까? 이 코드는 버그가있는 곳이 아닙니다. 예외가 있습니까? –