두 목록을 비교하고 싶습니다. List
을 사용하여 인터페이스하기 때문에 우리는 Object 클래스에서 equals
을 상속받지 않습니다. 어떻게해야합니까?두 목록 비교
두 목록 비교
답변
List
인터페이스에 equals
메서드가 포함되지 않은 경우에도 list-classes는 equals
메서드를 여전히 구현할 수 있습니다. API docs on AbstractList
에서
(예를 ArrayList
, LinkedList
에 대한 상속, Vector
) :
public boolean equals(Object o)
는리스트와 동일한 지 어떤지 지정된 객체를 비교합니다. 지정된 오브젝트가리스트이며, 양쪽리스트가 같은 사이즈로, 2 개의리스트 내의 대응하는 모든 요소의 페어가 동일한 경우에만, true를 돌려줍니다.
예를 들면 toString
, hashCode
등으로 동일하게 적용한다. @Pascal이 코멘트에 언급 된 바와 같이
는, List 인터페이스는 문서에 다음 equals
방법을 언급하고 상태 :
리스트 인터페이스는 Collection 인터페이스에 명시되지 않은 이상, 추가 규정을 배치 , iterator, add, remove, equals 및 hashCode 메소드의 규약에 대해 설명합니다.
나는 내가 분명하지 않고 당신이 옳았다는 것을 깨닫는다. –
equals
을 계속 사용할 수 있습니다. 모든 개체가 그것을 구현하고 목록은 여전히 개체이며 필요에 따라 equals
을 재정의합니다.
"평범한 동등한"과 "깊은 동등한 것"을 고려해야한다는 것은 일반적인 이야기입니다.
java.lang.Object에서 나오는 기본 동작은 "얕은 같음"입니다.
List list1 = new ArrayList();
List list2 = list1;
list1.equals(list2); // returns true;
당신이 "깊은 같음"을 원하는 경우 등의 ArrayList 같은 AbstractList를를 확장 아무것도 인스턴스화 : 그것은 목록 1과리스트 2는 동일한 참조가 있는지 확인합니다.
List<String> list1 = new ArrayList<>();
List<String> list2 = new ArrayList<>();
list1.add("hello");
list2.add("hello");
System.out.println(list1.equals(list2)); // will print true
list1.add("foo");
list2.add("bar");
System.out.println(list1.equals(list2)); // will print false
[Lists.equals() JavaDoc] (http://docs.oracle.com/javase/6/docs/api/java/util/List.html#equals (java.lang.Object))에 따르면 구현 List 인터페이스의 equality 요소는 요소별로 동일성을 검사해야합니다. Object.equals()가 "shallow equals"를 실행해도, List.equals() (및 준거 구현)는 "deep equals"를 실시해, 독자적인 메소드를 작성할 필요는 없습니다. – markusk
List에 대해서는 동의하지만 요소가 equals를 재정의하지 않으면 "deep equals"를 얻지 못합니다. 매우 명확하게 말한 것은 아니지만 그것이 진실이라고 믿습니다. – duffymo
Object.equals()는 deep equals의 자리 표시 자입니다. 얕은 같음에 사용하기위한 것이 아닙니다. 표준 계약은 모든 객체 (List뿐만 아니라)가 equals()를 구현하여 깊은 평등을 수행 할 것을 요구합니다.그게 equals() 메소드의 용도입니다. '=='은 얕은 비교를위한 것입니다. – SigmaX
- 1. 두 가지 컬렉션 목록 비교
- 2. 목록 비교
- 3. Linq 목록 비교
- 4. 목록 비교/세트 요소
- 5. 일반 목록 유형 비교
- 6. 효율적인 튜플 목록 비교
- 7. 이 두 목록
- 8. 사용자 목록 Sharepoint에서 날짜 비교
- 9. 특정 속성에 대한 두 가지 일반 목록 비교
- 10. 평등을위한 두 개의 목록 <string> 비교
- 11. 파이썬 2 목록 비교 최적화
- 12. 두 문자열 비교 문제 ...!
- 13. 비교 두 RouteValueDictionary 인스턴스
- 14. 두 개의 NSMutableDictionaries 비교
- 15. 두 언어 문자열 비교
- 16. 두 번 비교
- 17. django의 두 필드를 비교
- 18. 두 배열 비교
- 19. 두 파일 비교
- 20. 두 CGPDFDictionary 비교
- 21. 두 개의 JSON 비교
- 22. 두 문자열 C# 비교?
- 23. 두 Excel 시트 비교
- 24. 두 벡터 이미지 비교
- 25. 두 함수의 비교 방법
- 26. 두 개의 배열 비교
- 27. JPA와 두 날짜 비교
- 28. Subsonic 두 개체 비교
- 29. 두 테이블을 SQL로 비교
- 30. 두 데이터 집합 비교
List의 모든 구현은 직접적으로 또는 간접적으로 Object에서 상속합니다. OO에 대한 오해가있는 것 같습니다. – whiskeysierra