ConcurrentSkipListSet을 사용하고 contains 메소드를 사용하고 있습니다. 이 세트로 지정된 요소가있는 경우에ConcurrentSkipListSet.contains에 비교자가 필요하고 같지 않은 이유
는 자바 문서에 따라 경찰에 대한 메소드 진정한
반환이 포함되어 있습니다. 이 세트가 o.equals (e)와 같은 요소 e를 포함하고있는 경우에만 true를 리턴합니다.
하지만 내 테스트에 따르면 equals 메서드는 사용되지 않지만 Comparator는 필수 항목으로 나타납니다. ClassCastException이 발생할 수 필적으로 ComparableUsingComparator를 돌려 나를
ConcurrentSkipListSet
/** * 비교기를 사용하는 경우를 자바 규격 및 구현 사이의 이상을 이해하는 데 도움이됩니다, 다른 * 캐스트 키, * 호출자에게 다시 전달됩니다. */ 전용 필적 비교 (객체 키) java.util.concurrent.ConcurrentSkipListMap.comparable (ConcurrentSkipListMap.java:663) java.util.concurrent.ConcurrentSkipListMap.doGet에서 (ConcurrentSkipListMap.java:821)에서
java.util.concurrent.ConcurrentSkipListMap.containsKey에서 (ConcurrentSkipListMap.java:1608 것은) 내가 오라클 JDK 7
이것은 정렬 된 컬렉션에 대한 정상적인 동작입니다. "TreeSet"의 문서는 아마도 적용 가능할 것이다. "Set 인터페이스를 올바르게 구현하려면 집합에 의해 유지되는 순서 (명시 적 비교기가 제공되는지의 여부)가 equals와 일치해야합니다 (Comparable 또는 Comparator for를 참조하십시오). equals와 일치하는 정확한 정의). " –
CSLS 용 Java 문서는 굵게 표시해야합니다. –
@Louis Wasserman : ['TreeSet.contains'] (https://docs.oracle.com/javase/8/docs/api/java/util/TreeSet.html#contains-java.lang.Object-)에주의하십시오. 설명서에 오해의 소지가있는 문장이 있으며 분명히 Java 6에서 의도적으로 추가되었습니다. – Holger