Vector <Double> x = new Vector<Double>();
Vector <Integer> y = new Vector <Integer>();
System.out.print(x.equals(y));
에이 인쇄를 적용? equals()가 아닌데 - 기본적으로 두 개의 참조가 같은 객체를 가리키는 지 비교해야합니다.불일치는() 벡터
Vector <Double> x = new Vector<Double>();
Vector <Integer> y = new Vector <Integer>();
System.out.print(x.equals(y));
에이 인쇄를 적용? equals()가 아닌데 - 기본적으로 두 개의 참조가 같은 객체를 가리키는 지 비교해야합니다.불일치는() 벡터
equals
은 AbstractList
에 구현됩니다. 목록의 요소를 통과하고 같지 않으면 false를 반환합니다. 목록에 요소가 없기 때문에 true가 반환됩니다.
public boolean equals(Object o) {
if (o == this)
return true;
if (!(o instanceof List))
return false;
ListIterator<E> e1 = listIterator();
ListIterator e2 = ((List) o).listIterator();
while(e1.hasNext() && e2.hasNext()) {
E o1 = e1.next();
Object o2 = e2.next();
if (!(o1==null ? o2==null : o1.equals(o2)))
return false;
}
return !(e1.hasNext() || e2.hasNext());
}
톰은 List
인터페이스의 계약 당신이 동작을 정의하는 것을 볼 수 읽기, 코멘트에서 언급 한 바와 같이.
지정된 개체가 목록이고 두 목록의 크기가 같고 두 목록의 요소가 모두 일치하면 true를 반환합니다.
'Vector'는'List' 계약을 따릅니다. –
오히려 관련 질문에 실제 질문하지만,이 날 생각있어, 그것은 일부 결정된 경우 요소 비교를하기 전에 목록을 정렬하는 것이 더 빠를 것입니까? 당신은 1) 크기/instanceof/등을 확인하십시오. 2) 새로운 정렬 된 목록 3) oldskool 인덱스 반복, 각 쌍을 비교, 불일치 항목이 발견되면 빨리 실패합니다. – Esko
@Esko, 당신이 언급하는 의미는'List'가 아닌'Set'처럼 들립니다. 'List'에서는 질서가 중요합니다. –
Vector
은 고유 한 equals
방법이 있습니다. 그것의 내용을 비교합니다. 그리고 귀하의 Vector
은 모두 비어 있으므로 동일합니다.
참고 : 런타임시 유형 삭제 때문에 Vector
의 인스턴스가 두 개만 있습니다.
@tangens - 사실, 타입 삭제와는 관계가 없습니다. Vector.equals (...)/List.equals (...)의 사양과 관련된 모든 것입니다. –
@ stephen-c : 제 답변을 수정했습니다. – tangens
아니요, 두 개의 참조가 동일한 객체를 가리키는 경우 equals()는 비교하지 않아야합니다.
참조 된 개체가 과 같음 인 경우는 대부분 동일한 콘텐츠를 갖는 것을 의미합니다.
주어진 객체에 대해 메소드가 구현되지 않은 경우에만 동일한 객체를 비교합니다. 이 경우 Object
의 메소드가 ==
연산자와 함께 사용됩니다.
==
은 동일한 개체 (인스턴스)인지 비교하는 개체입니다.
당신은 그것을 말했다 : "기본적으로"! –