关于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();
              
       }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值