java sort排序函数

本文详细介绍了Java中Arrays.sort()函数的使用方法,包括一维数组的升序和降序排列,以及如何对二维数组的特定列进行排序。通过自定义Comparator实现复杂排序需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,sort函数,对一维数组元素,进行升序排列

用法: Arrays.sort(数组名称);

import java.util.Arrays;
import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		
		Scanner sc=new Scanner(System.in);
		int n=sc.nextInt();
		int a[]=new int[n];
		for(int i=0;i<n;i++)  //输入
		{
			a[i]=sc.nextInt();  
		}
		Arrays.sort(a);   //升序
		for(int i=0;i<n;i++) //输出
		{
			System.out.print(a[i]+" ");	
		}
	}
}

运行结果:

2,sort函数,对一维数组元素,进行降序排列

用Comparator

关于Integer包装类的介绍:https://www.cnblogs.com/yinzhengjie/p/8878866.html

用法: //Comparator中只能写包装类(Integer,Character,Double等)

         所以用此方法时,数组元素必须是Integer类型

Arrays.sort(a,new Comparator<Integer>() { 

            @Override                              
            public int compare(Integer a, Integer b) {
                
                return b-a;  //return a-b为升序
            }
  });

(1) 直接写

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		
		Scanner sc=new Scanner(System.in);
		int n=sc.nextInt();
		Integer a[]=new Integer[n];  //必须为Integer类型
		for(int i=0;i<n;i++)   //输入
		{
			a[i]=sc.nextInt(); 
		}
		Arrays.sort(a,new Comparator<Integer>() {  //降序
			@Override
			public int compare(Integer a, Integer b) {
				
				return b-a;  //降序(return a-b为升序)
			}
		});
		for(int i=0;i<n;i++)  //输出
		{
			System.out.print(a[i]+" ");	
		}
	}
}

 运行结果:

(2)也可以这样写

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class Main {
	public static class cmp implements Comparator<Integer>{ //自定义比较类
		@Override
		public int compare(Integer o1,Integer o2)
		{
			return o2-o1;  //降序(return o1-o2为升序)
		}
	}
	public static void main(String[] args) {
		
		Scanner sc=new Scanner(System.in);
		int n=sc.nextInt();
		Integer a[]=new Integer[n];  //Integer类
		for(int i=0;i<n;i++)    //输入
		{
			a[i]=sc.nextInt();  
		}
		Arrays.sort(a,new cmp());  //sort函数
		for(int i=0;i<n;i++)    //输出
		{
			System.out.print(a[i]+" ");	
		}
	}
}

运行结果:

3,sort函数,对二维的第一列,进行升序排列

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class Main{
	public static class act{ //创建类
		int first;
		int second;
	}
	public static class cmp implements Comparator<act>{ //自定义比较类
		public int compare(act o1,act o2)
		{
			return o1.first-o2.first;
		}
	}
	public static void main(String[] args) {
		
		Scanner sc=new Scanner(System.in);
		int n=sc.nextInt();

		act a[]=new act[n];    //数组是自己定义的act类型的
		for(int i=0;i<n;i++)  //输入
		{
			a[i]=new act();  //这个地方不要忘了
			a[i].first=sc.nextInt();  
			a[i].second=sc.nextInt();
		}
		Arrays.sort(a,new cmp());  //升序排列
		for(int i=0;i<n;i++)   //输出
		{
			System.out.print(a[i].first+" ");	
			System.out.print(a[i].second);
			System.out.println();
		}	
	}
}

运行结果:(按第一列,升序输出)

4,sort函数,对二维的2列,同时进行升序排列

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class Main {
	public static class act{ //创建类
		int first;
		int second;
	}
	public static class cmp implements Comparator<act>{ //自定义比较类
		public int compare(act o1,act o2)
		{
			if(o1.first==o2.first)
			{
				return o1.second-o2.second; //second从小到大
			}
			return o1.first-o2.first;//first从小到大
		}
	}
	
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		int n=sc.nextInt();
	
		act a[]=new act[n];
		for(int i=0;i<n;i++)
		{
			a[i]=new act();
			a[i].first=sc.nextInt();  
			a[i].second=sc.nextInt();
		}
		
		Arrays.sort(a,new cmp());    //升序
		
		for(int i=0;i<n;i++)
		{
			System.out.println(a[i].first+" "+a[i].second);
		}
	}
}

运行结果如下:先按第1列升序,然后在第1列相同的内部,对第2列进行升序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_39450145

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值