關於java排序
這裏給出了兩個示例
對於複雜對象或者問題,核心其實就是定義一個比較器
本菜對java還不是很熟練,定義和使用比較器的方法比較笨
這裏有一個關於比較器的文章,寫的還不錯
http://wenku.baidu.com/view/b8bca58371fe910ef12df8d0.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
import java.io.*;
import java.util.*;
import java.math.*;
import java.text.*;
import java.util.Comparator;
public class Main{
final static int maxn=100;
public static class student{
String name;
int score;
student(){};
student(String nn,int ss){
name=nn;
score=ss;
}
String getname(){
return name;
}
int getscore(){
return score;
}
void output(){
System.out.println(name+" "+score);
}
};
public static class MyComparator implements Comparator{
public int compare(Object obj1, Object obj2) {
student x=(student)obj1;
student y=(student)obj2;
if(x.getscore()!=y.getscore())
return x.getscore()<y.getscore()?1:-1;
return x.getname().compareTo(y.getname())>0?1:-1;
}
};
public static student p[]=new student[maxn];
public static Integer a[]=new Integer[maxn];
public static void main(String args[]){
Scanner in=new Scanner(System.in);
///排序1:數組排序
//示例數據
//5
//4 1 3 6 9
int n=in.nextInt();
for(int i=0;i<n;i++)a[i]=in.nextInt();
//第1個參數傳入的是數組的首地址例如a
//接下來傳入的是排序的範圍 x,y,表示將區間a[x]到a[y-1]段排序
//默認是從小到大排
Arrays.sort(a,0,n);
for(int i=0;i<n;i++)System.out.print(a[i]+" ");
System.out.println();
//這是構造方法類實現排序準則的形式
Arrays.sort(a,0,n,new Comparator<Integer>(){
public int compare(Integer x,Integer y){
return x<y?1:-1;//表示從大到小
}
});
for(int i=0;i<n;i++)System.out.print(a[i]+" ");
System.out.println();
//排序2:類排序
//示例數據
//5
//xiaoming 100
//dong 100
//haha 75
//hehe 80
//xiaowang 90
int m=in.nextInt();
for(int i=0;i<m;i++){
String name=in.next();
int score=in.nextInt();
p[i]=new student(name,score);
}
//示例:首先按成績從高到底,若相同,按名字字典序
Arrays.sort(p,0,m,new Comparator<student>(){
public int compare(student x,student y){
if(x.getscore()!=y.getscore())
return x.getscore()<y.getscore()?1:-1;
return x.getname().compareTo(y.getname())>0?1:-1;
}
});
//這是外部定義比較器類的使用方法
Arrays.sort(p,0,m,new MyComparator());
for(int i=0;i<m;i++)p[i].output();
}
}
|