Java-sort

对于Java中sort()方法的一点拙见


刚开始学java的小白,自己的一点认识,理解的不好希望得到指正 吐舌头

  • Arrays.sort()
Arrays.sort()可以直接对基本类型(int、char、double..)数组进行从小到大的排序,也可以对包装类类型(Integer、Character、Double..)进行从小到大排序

char型是按ASCII码排序的,例子如下

  public static void main(String[] args) {
 	char[] a= {'j','c','e','o'};
    	Arrays.sort(a);
    	for(int i=0;i<a.length;i++)
    	{
    		System.out.println(a[i]);
    	}
  }
c
e
j
o

如果你需要按自定义的规则排序,则需要重写compare()函数
而且只能重写包装类的,不能重写基本类型的。重写compare逆序排列例子如下

 public static void main(String[] args) {
    	Character[] a= {'j','c','e','o'};
    	Arrays.sort(a, new Comparator<Character>() {
    		public int compare(Character n1,Character n2)
    		{
    			if(n1>n2)
    			{
    			return -1;}
    			else if(n1<n2)
    			{return 1;}
    			else return 0;
    		}
    	});
    	for(int i=0;i<a.length;i++)
    	{
    		System.out.println(a[i]);
    	}
    }
o
j
e
c

可以看到Comparator<>中,只能写包装类,如果写char就会报错。


  • Collections.sort()


Collections.sort()是对集合类排序。同样的默认是从大到小排。
如果需要特殊的排序规则,像上面一样用Comparator接口重写compare()函数。
下面给出一个逆序排序的例子

public static void main(String[] args) {
    	Character[] a= {'j','c','e','o'};
    	ArrayList<Character> list=new ArrayList<Character>();
    	for(int i=0;i<a.length;i++)
    	{
    		list.add(a[i]);
    	}
    	Collections.sort(list,new Comparator<Character>() {
    		public int compare(Character c1,Character c2)
    		{
    			if(c1>c2)
    				return -1;
    			else if(c1<c2) return 1;
    			else return 0;
    		}
    	});
    	for(int i=0;i<a.length;i++)
    	{
    		System.out.println(list.get(i));
    	}
    }
o
j
e
c

好了  有人要问了 如果用基本类(int 、char)怎么办。
这里可以用Object类型替换,再在compare函数里强制转换为基本类型。
下面给一个题目作为例子

题目

读入n条学生成绩记录,包括学生姓名,总成绩,语文,数学和英语成绩,要求按总成绩从高到低输出n条记录,每条记录占一行。总成绩相同时按语文成绩从高到低输出,语文成绩相同时按数学成绩从高到低输出。(没有两个人的成绩完全一样)

输入:

第一行读入一个 n ( 0<n<=100) 接下来n行每行读入学生姓名,总成绩,语文,数学和英语成绩,中间以空格隔开

输出:

n行按要求排序好的记录。

样例输入
3
Lsx 270 90 90 90
Ywz 275 92 93 90
Wjx 255 85 85 85
样例输出
Ywz 275 92 93 90
Lsx 270 90 90 90
Wjx 255 85 85 85

AC代码
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
import java.util.Comparator;

class student{
	public String name;
	public int score_math;
	public int score_english;
	public int score_language;
	public int score_sum;
}
public class Main {
    public static void main(String[] args) {
    	Scanner scan=new Scanner(System.in);
    	ArrayList<student> list=new ArrayList<student>();
    	int n=scan.nextInt();
    	String input_n;
    	int input_language;
    	int input_math;
    	int input_english;
    	int input_sum;
    	for(int i=0;i<n;i++)
    	{
    		student s1=new student();
    		input_n=scan.next();
    		input_sum=scan.nextInt();
    		input_language=scan.nextInt();
    		input_math=scan.nextInt();
    		input_english=scan.nextInt();
    		s1.name=input_n;
    		s1.score_language=input_language;
    		s1.score_math=input_math;
    		s1.score_english=input_english;
    		s1.score_sum=input_sum;
    		list.add(s1);
    	}
    	Collections.sort(list,new Comparator<Object>() {
    		public int compare(Object a,Object b)
    		{
    			student s1=(student)a;
    			student s2=(student)b;
    			if(s1.score_sum>s2.score_sum)
    				return -1;
    			else if(s1.score_sum<s2.score_sum)
    				return 1;
    			else{
    				if(s1.score_language>s2.score_language)
    					return -1;
    				else if(s1.score_language>s2.score_language)
    					return 1;
    				else {
    					if(s1.score_math>s2.score_math)
        					return -1;
        				else if(s1.score_math>s2.score_math)
        					return 1;
        				else 
        					return 0;
    				}
    			}
    		}
		});
    	for(int i=0;i<list.size();i++)
			{
				System.out.println(list.get(i).name+" "+list.get(i).score_sum
						+" "+list.get(i).score_language+" "+list.get(i).score_math
						+" "+list.get(i).score_english);
			}
    
   }
 
    
}



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值