侧边栏壁纸
博主头像
Epoch

Java开发、Python爬虫、微服务、分布式、前端

  • 累计撰写 92 篇文章
  • 累计创建 109 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Java基础--Comparable和Comparator的区别

Epoch
2021-01-17 / 0 评论 / 0 点赞 / 246 阅读 / 554 字 / 正在检测是否收录...

Comparable和Comparator的区别

1、Comparator接口位于java.util包下,而Comparable接口位于java.lang包下

2、对于Comparator接口,可以看到它的compare()方法的参数是两个对象,比如我们队Cat类进行比较,那么这里就是两个 要比较的Cat类的对象,所以可以有一个单独的类实现Comparato

import java.util.Comparator;

public class NameComparator implements Comparator<Cat> {

	@Override
	public int compare(Cat o1, Cat o2) {
		// 按名字升序排序
		String name1=o1.getName();
		String name2=o2.getName();
		int n=name1.compareTo(name2);
		return n;
	}

}

对于Comparable接口,它的方法只有一个对象作为参数,所以要比较的类需要实现Comparable接口,将当前对象与方法参 数中的对象进行比较。

public class Goods implements Comparable<Goods> {
	private String id;//商品编号
	private String name;//商品名称
	private double price;//商品价格
	//构造方法
	public Goods(String id,String name,double price){
		this.id=id;
		this.name=name;
		this.price=price;
	}

	//getter和setter方法
	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public double getPrice() {
		return price;
	}

	public void setPrice(double price) {
		this.price = price;
	}
	public String toString(){
		return "商品编号:"+id+",商品名称:"+name+",商品价格:"+price;
	}
	@Override
	public int compareTo(Goods o) {
		// 取出商品价格
		double price1=this.getPrice();
		double price2=o.getPrice();
		int n=new Double(price2-price1).intValue();
		return n;
	}

}

因此,如果使用Comparator接口,那么要比较的类和实现Comparator接口的类可以分开,如果使用Comparable接口,那么 要比较的类就要实现Comparable接口才可以。

3、关于应用场景

一般情况下如果对某个类进行排序,比如Cat类,如果使用Comparable接口的方式,那么Cat类需要实现Comparable接口。 如果Cat类通过Comparable接口的方式实现排序,比如通过name排序了。那么我们还希望通过age进行排序,这时不希望 修改Cat类,那此时就需要使用Comparator接口了

因此,Comparable接口可以作为实现类的默认排序算法,Comparator接口则用于一个类的扩展排序

0

评论区