compareTo
해야 반환 결과. 그렇지 않으면 정렬 결과가 어떤 식 으로든 보장되지 않습니다. 전체 주문은 A<B
이면 B>A
이고 A==B
인 경우 B==A
을 의미합니다. 즉, this
및 other
을 전환 할 수 있으며 그 결과는 일관됩니다. 제시 한 코드는 직원 유형에도이 작업을 수행하지 않습니다.
compareTo
이 전체 주문과 일치하지 않으면 sort
이 잘못된 대답을 만들거나 종료되지 않습니다.
시스템에 직원 유형이 3 가지인지 2인지는 분명하지 않습니다. 2라고 가정 해 봅시다. 그리고 우리가 possiblities를 통해 작업해야합니다
this other result
------------------------
salaried salaried equal
daily salaried <
salaried daily >
daily daily equal
우리는 이것과 다른 직원 유형에서 동일하다는 설립 한 후에 만 우리가 총 급여입니다 보조 정렬 키를 가지고 간다.
그래서이를 코딩하는 한 가지 방법은 다음과 같습니다 나는이가 Employee
에 구현되어 있으리라 믿고있어
// Assume this and o have type Daily or Salaried.
public int compareTo(Object o) {
if (this instanceof Daily && o instanceof Salaried) return -1;
if (this instanceof Salaried && o instanceof Daily) return +1;
// The employee types must be equal, so make decision on pay.
Employee e = (Employee)o;
return grossPay() < e.grossPay() ? -1 :
grossPay() > e.grossPay() ? +1 : 0;
}
.
마지막으로 Comparator
을 사용하여이 종류를 구현하는 것이 좋습니다. compareTo
메서드는 기본 키 역할을하는 고유 한 ID 번호의 숫자 순서와 같은 "자연"정렬 순서에 대해 예약해야합니다. 이 정렬 기준은 "자연스러운"것으로 보이지 않습니다.
[http://stackoverflow.com/questions/369512/best-way-to-compare-objects-by-multiple-fields](http://stackoverflow.com/questions)를 참조하십시오./369512/최선의 방법 - 개체 - 다중 필드 비교). 그것은 (내가 아는 한) 당신의 질문에 꽤 많이 대답합니다. – purtip31