java排序中如何定义多个比较器

import java.util.Arrays;
import java.util.Scanner;

public class A implements Comparable{
String i;
String j;
String p;
public A(String i,String j,String p){
this.i=i;
this.j=j;
this.p=p;
}
@Override
public int compareTo(Object obj) {
// TODO Auto-generated method stub
String k=((A)obj).j;
if (k.compareTo(j)>0)
return -1;
else if (k.compareTo(j)<0)
return 1;
else
return 0;
}
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int n=in.nextInt();
A[]x=new A[n];
for (int i=0;i<n;i++){
String a=in.next();
String b=in.next();
String c=in.next();
x[i]=new A(a,b,c);
}
Arrays.sort(x); //按j排序
System.out.print(x[0].j);
Arrays.sort(x); //按p排序
System.out.print(x[n-1].p);
}
}
第一个比较器按j排序,已加。
第二个比较器按p排序,应该加在哪里?

0

2个回答

实现多个比较器,然后根据需要传对应的

 package aa;

import java.util.Arrays;
import java.util.Comparator;

public class Arraysort {
    Point[] arr;

    Arraysort(){
        arr=new Point[4];    //定义对象数组arr,并分配存储的空间
        for(int i=0;i<4;i++)
            arr[i]=new Point();
    }

    public static void main(String[] args) {

        Arraysort sort=new Arraysort();
        sort.arr[0].x=2;sort.arr[0].y=1;    //初始化,对象数组中的数据
        sort.arr[1].x=2;sort.arr[1].y=2;
        sort.arr[2].x=1;sort.arr[2].y=2;
        sort.arr[3].x=0;sort.arr[3].y=1;

        Arrays.sort(sort.arr, new MyComprator());    //使用指定的排序器,进行排序
        for(int i=0;i<4;i++)    //输出排序结果
            System.out.println("("+sort.arr[i].x+","+sort.arr[i].y+")");
    }
}

class Point{
    int x;
    int y;
}

//比较器,x坐标从小到大排序;x相同时,按照y从小到大排序
class MyComprator implements Comparator {
    public int compare(Object arg0, Object arg1) {
        Point t1=(Point)arg0;
        Point t2=(Point)arg1;
        if(t1.x != t2.x)
            return t1.x>t2.x? 1:-1;
        else
            return t1.y>t2.y? 1:-1;
    }
}
1
God_V
Fandwe 万分感谢
大约 2 年之前 回复

你可以用TreeSet集合,定义多个比较器,实现Comparator接口,重写Compare方法,TreeSet集合在创建对象的时候可以指定比较器

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!