自定义比较器--偶数大于奇数,降序排序

本文介绍如何通过自定义比较器实现特定的排序逻辑,包括优先级排序,如偶数优先于奇数,以及数值大小排序。并通过一个实例展示了如何在Java中实现并应用自定义比较器。

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

自定义比较器

继承Comparator<Type>接口,在compare(Type a, Type b)方法中自定义:

1、return 负数:a,b不调整顺序;

2、return 正数:a,b调整顺序;

import java.util.Comparator;
public class NewComparator implements Comparator<Integer>{
	public int compare(Integer i1,Integer i2){
		return i1 - i2;//升序,因为当i1<i2时,返回负数,不调整顺序,i1>i2时返回正数,调整顺序
                //return i2 - i1;//降序,同理
	}
}

应用

题目:

读入一个数列和k值,按优先级返回k个数,满足:

1、偶数优先级高于奇数;

2、同为偶数或同为奇数时,数值大的优先级高于数值小的;

输入格式:

1,2,3,4,5,6,7,8;5

说明:数列和数值k“;”隔开,数列的值用“,”隔开

输出:

8,6,4,2,7

代码如下:

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class Main {
	public static void main(String args[]){
                //自定义比较器
		class NewComparator implements Comparator<Integer>{
			public int compare(Integer i1,Integer i2){
				if(i1%2==0 && i2%2!=0)
					return -1;
				else if(i1%2!=0&&i2%2==0)
					return 1;
				else 
					return i2-i1;
			}
		}
		Scanner sc = new Scanner(System.in);
		String str = sc.nextLine();
		String[] arrStr = str.split(";")[0].split(",");
		int k = Integer.valueOf(str.split(";")[1]);
		Integer[] arr = new Integer[arrStr.length];
		int index = 0;
		for(String item:arrStr ){
			arr[index++] = Integer.valueOf(item); 
		}
                //应用自定义比较器排序
		Arrays.sort(arr,new NewComparator());
                //返回前k个数
		index = 0;
		while(k>0){
			System.out.print(arr[index++]);
			if(k!=1)
				System.out.print(",");
			k--;
		}

	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值