2010-05-22 2 views
0

Collection 아래에 많은 구체적인 하위 클래스가 있습니다.Collection, 요소의 추가를 승인하는 데 사용되는 메서드는 무엇입니까?

구체적인 컬렉션에 요소를 추가하려고 시도하는 동안이 컬렉션은 요소를 저장할 수 있는지 여부를 결정하는 메서드를 사용합니다 (결국이 요소는 컬렉션에 없습니다). 요소의 equals(), hashCode() 또는 compareTo()을 사용할 수 있습니다.

Collection의 각 구현에서 어떤 방법을 사용하는지 요약 할 수 있습니까?

답장을 보내 주셔서 감사합니다.

답변

1

먼저 모든 컬렉션이 추가중인 요소가 이미 컬렉션에 있는지 확인하지는 않습니다. 예를 들어, ArrayList는 목록에 이미 있는지 확인하지 않고 요소를 목록의 끝에 추가합니다. 요소가 Comparable로 간주되고 콜렉션이 정렬 될 경우 (이를 삽입 할 적절한 위치를 찾기 위해) 콜렉션이 오브젝트의 사본을 하나만 갖거나, compareTo가 보장되는 경우 다른 클래스는 equals를 사용합니다. 맵은 equals를 사용하여 키를 확인하지만 HashMap과 같은 일부 메소드는 hashCode()를 사용하여 검색 프로세스의 속도를 높입니다. 먼저 동일한 해시 코드로 모든 키를 가져오고 각 키에 equals를 사용하여 키가 이미 있고 값이 할당 된 경우 대체됩니다).

그러나 어떻게 작동하는지 보려면 jdk에 포함 된 출처를 확인하십시오. 이클립스에서 jdk가 설치된 폴더로 JRE를 설정하고 Ctrl + Shift + T를 사용하여 jdk에서 클래스 (유형)를 열거 나 Ctrl + 이름으로 클래스 이름을 클릭하거나 메서드, CTRL + 클릭 -> 구현 열기, 해당 메소드를 구현하는 클래스가있는 팝업을 엽니 다 (인터페이스 인 경우 또는 인터페이스가 클래스가 아닌 경우 클래스의 메소드)

1

구체적인 구현은 API의 doc에서 요소의 동작에 대한 가정을 나타내야합니다.

일반적으로, 해시 기반의 컬렉션은 hashCode()과 나무 기반의 사람이 compareTo() 또는 Comparator를 사용하여 사용하고, 그들 모두는 equals()를 사용합니다.

관련 문제