【JAVASE】比较器Compare与CompareTo区别

相同之处

实现Compare接口与Comparator接口的类,都是为了对象实例数组排序的方便,因为可以直接调用java.util.Arrays.sort(对象数组名称),可以自定义排序规则。

区别

1 排序规则实现的方法不同

Comparable接口的方法:compareTo(Object o),把当前对象与o进行比较,Object为类型

Comparator接口的方法:compare(T o1, T o2),T为类型

2 类设计前后不同

Comparable接口用于在类的设计中使用;

Comparator接口用于类设计已经完成,还想排序(Arrays);

Comparable接口实例

package Lab5;

import java.util.Arrays;

public class Compare {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		book [] books= {
				new book("仙剑奇侠传1", 10),
				new book("仙剑奇侠传2", 12),
				new book("仙剑奇侠传3", 22),
				new book("仙剑奇侠传4", 8),
				new book("仙剑奇侠传5", 12)
		};
		Arrays.sort(books);
		for (book b : books) {
			System.out.println(b);
		}
	}

}
class book implements Comparable<book>{//Comparable<T>,T填需要比较的类名,这里即book
	public book(String nameString,int price) {
		// TODO 自动生成的构造函数存根
		this.nameString=nameString;
		this.price=price;
	}
	private String nameString;
	private int price;
	public String toString() {//重载toString,使得syso(bookObject)可以直接输出
		return "书名为:   "+nameString+"        价格为:"+price;
	}
	@Override
	public int compareTo(book o) {//按照升序
		// TODO 自动生成的方法存根
		if(this.price>o.price)return 1;//当本书价格大于比较的书的价格时,放在数组后面
		else if (this.price<o.price)return -1;
		return 0;
	}
	
}

Comparator接口实例

该方法需要构造一个比较器类CompareBook

package Lab5;

import java.util.Arrays;
import java.util.Comparator;

public class Compare {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		book [] books= {
				new book("仙剑奇侠传1", 10),
				new book("仙剑奇侠传2", 12),
				new book("仙剑奇侠传3", 22),
				new book("仙剑奇侠传4", 8),
				new book("仙剑奇侠传5", 12)
		};
		Arrays.sort(books,new CompareBook());//使用匿名内部类对象
		for (book b : books) {
			System.out.println(b);
		}
	}

}
class book{
	public book(String nameString,int price) {
		// TODO 自动生成的构造函数存根
		this.nameString=nameString;
		this.price=price;
	}
	private String nameString;
	private int price;
	public String toString() {//重载toString,使得syso(bookObject)可以直接输出
		return "书名为:   "+nameString+"        价格为:"+price;
	}
	int getprice() {
		return price;
	}
}


class CompareBook implements Comparator<book>{//Comparator<T>,T填需要比较的类名,这里即book
	@Override
	public int compare(book o1, book o2) {
		//数组顺序a1 ,a2 ,a3,...先比较a1,a2,再比较a2,a3,从小到大排序就可以理解了
		//由于price是book类的私有成员,所以不能使用o1.price,需要使用o1.getprice方法
		if(o1.getprice()>o2.getprice())return 1;//当o1价格大于比较的书的价格时,放在数组后面
		else if (o1.getprice()<o2.getprice())return -1;
		return 0;
	}	
}

参考资料

  1. https://www.cnblogs.com/qingmuchuanqi48/articles/15336178.html
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

LenckCuak

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

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

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

打赏作者

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

抵扣说明:

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

余额充值