>

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

    와이즈 비즈  아니면 그런가요?

    그렇지 않다면, 그 이유입니다.

    와이즈 비즈 , 당신은 요소 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 재정의 참조)

  • 답변 # 2

    명시적인 HashSet 를 전달하지 않은 경우   @Override hashCode() 에 , 객체가 equals(Object) 라고 가정하여 객체를 비교하려고 시도합니다. ). 그리고 그들이 Comparator 하지 않으면 , 비교할 수 없으므로이 예외가 발생합니다!
    와이즈 비즈  정렬 된 세트이며 TreeSet 인 오브젝트가 필요합니다.  또는 Comparable   Comparable 에서 객체를 정렬하는 방법을 결정하기 위해 전달됩니다. .

  • 답변 # 3

    만으로도 세트에서 중복 항목을 제거하려면 TreeSets 를 사용하십시오. 비록 그것이 Comparable 에 의해 반환 된 객체의 순서를 뒤섞을 것이지만  무작위로 나타나는 방식으로.
    그러나 순서를 어느 정도 유지하려면 Comparator 를 사용하십시오. , 적어도 목록의 게재 순서를 유지합니다.

    Set   HashSet 가 필요한 경우에만 적합합니다  객체의 Iterator 구현에 따라 정렬  또는 사용자 정의 LinkedHashSet 에 의해   TreeSet 에 전달  생성자.

    Set

  • 이전 coding style - $this-> input-> post ()에 액세스하는 Codeigniter 모범 사례
  • 다음 runtime - Java 앱이 종료/크래쉬 될 때 Java 자식 프로세스를 제거하려면 어떻게해야합니까?