자바로.util.Collections의sort 방법으로 두 종류의 대상을 정렬합니다

1621 단어 솔루션

이것은 제목이 제기한 문제에 대해 비교적 둔한 해결 방안을 제공했고 외부 비교기 인터페이스인 Comparator를 사용했다.

import java.util.*;

class A implements Comparable{
int num;
public A(int num){
this.num = num;
}
@Override
public int compareTo(A a){
return this.num > a.num ? 1 : -1;
}
@Override
public String toString(){
return "A-"+ this.num;
}
}
class B implements Comparable {
int num;
public B(int num){
this.num = num;
}
@Override
public int compareTo(B b){
return this.num > b.num ? 1 : -1;
}
@Override
public String toString(){
return "B-"+ this.num;
}
}
class ABComparator implements Comparator {
public int compare(Object o1, Object o2) {
if((o1 instanceof A) && (o2 instanceof B)){
A a = (A) o1;
B b = (B) o2;
if(a.num > b.num){
return 1;
} else {
return -1;
}
}
if((o1 instanceof B) && (o2 instanceof A)){
B a = (B) o1;
A b = (A) o2;
if(a.num > b.num){
return 1;
} else {
return -1;
}
}
if((o1 instanceof A) && (o2 instanceof A)){
A a = (A) o1;
A b = (A) o2;
return a.compareTo(b);
}
if((o1 instanceof B) && (o2 instanceof B)){
B a = (B) o1;
B b = (B) o2;
return a.compareTo(b);
}
return 0;
}
}
class Test1 {
public static void main(String[] args) {
List ls = new ArrayList();  
ls.add(new A(1));
ls.add(new A(15));
ls.add(new A(20));
ls.add(new A(4));
ls.add(new A(13));
ls.add(new B(11));
ls.add(new B(14));
ls.add(new B(12));
ls.add(new B(13));
ls.add(new B(10));
Collections.sort(ls, new ABComparator());
System.out.println(ls);
}
}

좋은 웹페이지 즐겨찾기