홈>
List<MyClass> myclassList = (List<MyClass>) rs.get();
TreeSet<MyClass> myclassSet = new TreeSet<MyClass>(myclassList);
이 코드가 이것을 생성하는 이유를 이해하지 못합니다 :
java.lang.ClassCastException: MyClass cannot be cast to java.lang.Comparable
MyClass는 Comparable을 구현하지 않습니다. 내 목록에 불필요한 중복이 포함되어 있기 때문에 Set을 사용하여 List의 고유 한 요소를 필터링하려고합니다.
- 답변 # 1
- 답변 # 2
명시적인
HashSet
를 전달하지 않은 경우@Override hashCode()
에 , 객체가equals(Object)
라고 가정하여 객체를 비교하려고 시도합니다. ). 그리고 그들이Comparator
하지 않으면 , 비교할 수 없으므로이 예외가 발생합니다!
와이즈 비즈 정렬 된 세트이며TreeSet
인 오브젝트가 필요합니다. 또는Comparable
Comparable
에서 객체를 정렬하는 방법을 결정하기 위해 전달됩니다. . - 답변 # 3
만으로도 세트에서 중복 항목을 제거하려면
TreeSets
를 사용하십시오. 비록 그것이Comparable
에 의해 반환 된 객체의 순서를 뒤섞을 것이지만 무작위로 나타나는 방식으로.
그러나 순서를 어느 정도 유지하려면Comparator
를 사용하십시오. , 적어도 목록의 게재 순서를 유지합니다.Set
HashSet
가 필요한 경우에만 적합합니다 객체의Iterator
구현에 따라 정렬 또는 사용자 정의LinkedHashSet
에 의해TreeSet
에 전달 생성자.Set
트렌드
- OpenCv의 폴더에서 여러 이미지 읽기 (python)
- 파이썬 셀레늄 모든 "href"속성 가져 오기
- html - 자바 스크립트 - 클릭 후 변경 버튼 텍스트 변경
- javascript - 현재 URL에서 특정 div 만 새로 고침/새로 고침
- JSP에 대한 클래스를 컴파일 할 수 없습니다
- JavaScript 변수를 HTML div에 '출력'하는 방법
- git commit - 자식 - 로컬 커밋 된 파일에 대한 변경을 취소하는 방법
- jquery - JavaScript로 현재 세션 값을 얻으시겠습니까?
- javascript - swiperjs에서 정지, 재생 버튼 추가
- python - 화면에서 찾은 요소를 찾을 수없는 경우 셀레늄
와이즈 비즈 아니면 그런가요?
그렇지 않다면, 그 이유입니다.
와이즈 비즈 , 당신은 요소
MyClass implements Comparable<MyClass>
를 만들어야합니다 또는TreeSet
를 제공하십시오 . 그렇지 않으면Comparable
요소를 주문하는 방법을 모르기 때문에 작동하지 않습니다.와이즈 비즈 기억하기 주문 방법을 알아야합니다 요소를 어떤 식 으로든 다른 방식으로
Comparator
구현 방법에 익숙해 져야합니다 주어진 유형의 객체에 대해자연 순서를 정의합니다.TreeSet
라는 하나의 메소드를 정의합니다. 이 객체가 다른 객체보다 작거나 같거나 큰 경우 음수, 0 또는 양의 정수를 반환해야합니다.계약은필요 사항:
TreeMap implements SortedSet
전 이적이다 :
Comparable
compareTo
를 암시sgn(x.compareTo(y)) == -sgn(y.compareTo(x))
그x.compareTo(y)>0 && y.compareTo(z)>0
를 의미 모든x.compareTo(z)>0
또한 다음과 같이추천합니다 :
x.compareTo(y)==0
즉, "sgn(x.compareTo(z)) == sgn(y.compareTo(z))
와 일치이것은 처음에는 소화하는 것처럼 보일지 모르지만 실제로는 매우 자연 스럽습니다. 전체 주문을 정의하는 방법
<시간>객체를 어떤 식 으로든 주문할 수 없다면
z
이해가되지 않습니다. 당신은(x.compareTo(y)==0) == (x.equals(y))
를 사용할 수 있습니다 대신 자체 계약이 있습니다. 당신은equals
를 요구할 가능성이 높습니다 그리고TreeSet
귀하의 유형에 따라 (Java에서 equals 및 hashCode 재정의 참조)