關於java的排序規則寫法

 

關於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();
              
       }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章