对于需要对二维数组按某一行按升序排列,若那一行相同,则按另一行的升序排列。
方法一:定义一个类
以下为木棍加工问题,l为木棍长度,w为木棍重量,定义一个木棍类,保存木棍的长和重量。
class Wood implements Comparable<Wood>{
int l;
int w;
int judge = 0;
public Wood(int l,int w){
this.l = l;
this.w = w;
}
//重写比较方法
public int compareTo(Wood wood) {
if(l == wood.l){
return (w > wood.w)? 1:-1;
}
return (l > wood.l)? 1:-1;
}
Scanner in=new Scanner(System.in);
int n = in.nextInt(); //一共有n根木头
Wood[] woods = new Wood[n];
for(int j = 0; j < n; j++){
woods[j] = new Wood(in.nextInt(),in.nextInt());
}
Arrays.sort(woods);
对woods调用Arrays.sort()即可完成排序。
方法二:Collection.sort()
Collections.sort()使用该方法实际是重写Comparator接口的compare方法实现排序:
//传入参数list集合,Comparator接口 T:list的元素类型
Collections.sort(list, new Comparator<T>() {
@Override
public int compare(T o1, T o2) {
//比较两个数大小,返回1则调换顺序,返回-1不换
int i = o1.get("....") - o2.get("....");
// i > 0,返回1则降序,返回-1则升序
if (i > 0) {
return 1;
}
return -1;
}
});
Arrays.sort(a, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
if (o1[0]==o2[0]) return o1[1]-o2[1];
return o1[0]-o2[0];
}
});
//其中o1[1]-o2[1]表示对于第二个元素经行升序排序如果为o2[1]-o1[1]则表示为降序。