2013-05-03 5 views
1

누군가가 내지도 교사가 제공 한 코드에서 다음 행이 무엇을해야한다고 말 할 수 있습니까?ArrayList에서 중복 찾기

if (data.contains(entry)) 

전체 방법 :

public String add(Entry entry) { 
    if (entry == null) 
     return "Error: null entry"; 
    if (data.contains(entry)) 
     return "Error: this entry already in the book"; 

    boolean done = data.add(entry);  
    if (done) 
     return " entry added"; 
    else 
     return "entry could not be added"; 
    } 

나는 그것이 ArrayList를 내 같은 세부 사항을 가진 기존 항목에 대한 검사라고 생각하지만 중복 항목을 추가 할 때 그렇게 생각 if 문에 갈 나던 I 잘못 생각한거야? 나는 인터넷에서 검색을했는데 이것이이 목적을위한 것이라고 말하면서 왜 그것이 나를 위해 일하지 않는가?

+0

당신이이 같음을 사용하여 (같은 있는지의 경우 외부 개체를 비교하는 시도가 방법)? http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html#contains(java.lang.Object) – lcguida

+0

@rockskull이 클래스의 메소드를 사용하면 아무것도 수행되지 않습니다. 어쨌든 그것을 수정할 수 없습니다. 주어진 주소록을 만들기 위해 주어진 클래스들을 확장했습니다. 그는 우리가 이것을 어떻게 든 사용하고 싶어 할 것입니다. 그렇지 않다면 왜 그들이 거기에 넣을까요? – ToniHopkins

+0

또한 Java 메소드에서 문자열 상태를 반환하는 것이 정상적인 것은 아님을 지적 할 필요가 있습니다. 대신 의미있는 반환 값이 없으면 'void'메소드를 작성하십시오. 문제가 발생하면 예외를 throw하십시오. –

답변

6

contains()equals()과 평등 검사를 수행 것을 기억하십시오. 따라서 개체가 해당 메서드를 재정의하지 않는 한 동일한 개체 참조가 아니면 개체가 동일하지 않다고 간주합니다.

물론 equals()을 재정의하지 말고 hashCode()도 무시하지 마세요.

마지막으로 중복 객체를 원하지 않으면 Set을 사용하는 것이 좋습니다.

+1

'equals'에 과부하가 걸리지 않으면 비 기본 객체의 두 인스턴스가 같은 것으로 간주되지 않습니다. 인스턴스) 따라서'contains'는 항상 false를 반환합니다. –

+0

@DuncanJones 어쨌든 (그 문제에 대한 클래스의)이 방법을 수정할 수 없기 때문에 실제로 중복 항목을 확인하지 않으면 아무런 도움이되지 않습니다. Java에 익숙한 어휘 – ToniHopkins

+0

@ToniHopkins 명확하려면 'Entry' 클래스를 편집 할 수 있습니까? –

1

이 같음을 확인()와 hashCode()

0

메서드 메서드를 사용하면 equals() 메서드를 사용하여 두 개체가 같은지 평가할 수 있습니다.

as per docs

(o==null ? e==null : o.equals(e)); 

그래서 당신이 compareovverideequals 방법이 내부 로직 그들