Java常用类(比较器)

这个类用来在对象之间进行排序,根据对象的某个属性进行。

1.Comparable接口

需要重写compareTo方法,然后自定义排序规则
在String和包装类内已经重写过这个方法了,可以直接调用

自定义类,使用继承Comparable接口
class goods implements Comparable{
	String name;
	int price;
	public goods(String name , int price) {
		this.name = name;
		this.price = price;
	}
	
	@Override
	public int compareTo(Object o) {		当使用泛型后,这里就不是object了,而是传入的泛型类型
		goods i = (goods)o;
		if(this.price > i.price)			基本定义规则
			return 1;						大于的话就返回正数
		else if(this.price < i.price)
			return -1;						小于的话返回负数
		else
			return 0;						相等的话返回0
	}
	
	public String toString() {
		return name+""+price;
	}
}

public class Main{
	public static void main(String[] args){
		goods[] arr = new goods[5];
		
		arr[0] = new goods("华为" , 3000);
		arr[1] = new goods("小米" , 2000);
		arr[2] = new goods("京东" , 1000);
		arr[3] = new goods("淘宝" , 4000);
		arr[4] = new goods("三星" , 5000);
		
		Arrays.sort(arr);		会根据compareTo返回结果排序
		
		System.out.println(Arrays.toString(arr));
		输出结果:[京东1000, 小米2000, 华为3000, 淘宝4000, 三星5000]

	}
}

2.Comparator接口

定制排序
属于临时性的,能使用第一个还是尽量使用
使用场合:
1.元素类型没有实现Comparable接口。而又不方便修改代码
2.类已经实现的Comparable的方法不适合项目需求

只需要修改上面代码的sort即可
Arrays.sort(arr , new Comparator() {
			@Override
			public int compare(Object o, Object o1) {		当使用泛型后,这里就不是object了,而是传入的泛型类型
				goods i = (goods)o;
				goods i1 = (goods)o1;
				return -i.compareTo(i1);		也可以自己定义if语句,设置返回值
			}});

新增的默认方法
一般lambda表达式时用

  1. 逆序 •reversed()
  2. 比较器链 当前面比较想的时,用第二个比较器比较 •thenComparing()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值