自定义比较器
继承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--;
}
}
}