두 개의 비교기, 즉 1 차 및 2 차 비교기가 있습니다. 먼저 기본 비교기에 의해 배열을 정렬 한 다음 보조 배열로 배열을 정렬 할 수 있습니까?두 개의 비교기가있는 배열을 정렬 하시겠습니까?
각 개체에는 이름과 숫자 필드가 있습니다.
Bob 1
Bob 2
Jack 1
Jack 2
처럼
는 새로운 비교기를 작성하지 않고 할 수 있습니까?
두 개의 비교기, 즉 1 차 및 2 차 비교기가 있습니다. 먼저 기본 비교기에 의해 배열을 정렬 한 다음 보조 배열로 배열을 정렬 할 수 있습니까?두 개의 비교기가있는 배열을 정렬 하시겠습니까?
각 개체에는 이름과 숫자 필드가 있습니다.
Bob 1
Bob 2
Jack 1
Jack 2
처럼
는 새로운 비교기를 작성하지 않고 할 수 있습니까?
예, 새로운 c를 만들지 않고 정렬 할 수 있습니다. omparator.
기본 입력란, 보조 입력란, 제 3 입력란 등으로 정렬하기 위해 well-known trick이 있습니다. 가장 중요하지 않은 입력란 (제 3), 다음 중요한 입력란 (보조 입력란) 및 마지막으로 가장 중요한 입력란 (기본 입력란) . 그러나 이것이 작동하려면 정렬 알고리즘이 안정적이어야합니다..
배열을 정렬하려면 Arrays.sort()
을 사용하십시오. List
을 정렬하는 경우 Collections.sort()
을 사용하십시오. 이 두 가지 방법 모두 안정적입니다.
기본 비교 개체가 변수 primaryComp
에 저장되어 있고 보조 개체가 secondaryComp
인 것으로 가정합니다. 다음은 원하는 것을 이루기위한 코드입니다.
Arrays.sort(mylist, secondaryComp); // This must come first!
Arrays.sort(mylist, primaryComp);
두 번째 비교기를 먼저 비교 한 다음 첫 번째 비교기를 비교하십시오. 나는 그 트릭을해야한다고 생각합니다. 클래스를 만들어 이렇게 할 수 있습니다.
class FullName {
public String firstName;
public String secondName;
}
는,
BobBobbins
라는 새로운 이름을 만들어 값을 할당 한 후 간단한 첫 번째 이름을 비교 한 다음 이름 말해봐. 당신은 비교 할 수있는 정적 기능을 가질 수 있습니다
public static bool compareTo (FullName name1, FullName name2) {
// Algorithm here
}
는 정적 비교기를 사용해야을, 당신이해야 할 것입니다 수 있습니다 : 클래스를 가정 FullName.compareTo(BobBobbins, CharlieChaplin);
은 다음
class X {
String name;
int num;
}
입니다 정렬은
Arrays.sort(x, new Comparator<X>() {
@Override
public int compare(X o1, X o2) {
if (o1.name.equals(o2.name)) {
return Integer.compare(o1.num, o2.num);
}
return o1.name.compareTo(o2.name);
}});
Nice. 나는 그 트릭에 대해 몰랐다! – Jack