JavaSE—Comparator接口(推荐使用)

一、Comparator接口与Comparable接口的不同

       Comparator位于包java.util下,而Comparable位于包java.lang下。

       Comparable接口将比较代码嵌入需要进行比较的类的自身代码中,而Comparator接口在一个独立的类中实现比较。

       如果前期类的设计没有考虑到类的Compare问题而没有实现Comparable接口,后期可以通过Comparator接口来实现比较算法进行排序,并且为了使用不同的排序标准做准备,比如:升序、降序。

       Comparable接口强制进行自然排序,而Comparator接口不强制进行自然排序,可以指定排序顺序。

二、使用Comparator接口的步骤

       1、创建一个单独的类,实现Comparator接口,重写compare方法,以此类作为比较器:

public class FruitsCompare implements Comparator<Fruits>{

	@Override
	public int compare(Fruits o1, Fruits o2) {
		if(o1.getId()>o2.getId()) {
			return -1;
		}else if(o1.getId()<o2.getId()) {
			return 1;
		}else {
			return 0;
		}
	}
}

       2、用比较器类来实例化一个对象,此对象即为比较器:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

public class Fruits{
	private int id;
	private String name;
	private String color;

	public Fruits(int id, String name, String color) {
		super();
		this.id = id;
		this.name = name;
		this.color = color;
	}
	
	public int getId() {
		return id;
	}

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

	public String getName() {
		return name;
	}

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

	public String getColor() {
		return color;
	}

	public void setColor(String color) {
		this.color = color;
	}

	@Override
	public String toString() {
		return "Fruits [id=" + id + ", name=" + name + ", color=" + color + "]";
	}

	public static void main(String[] args) {
		List<Fruits> list=new ArrayList<>();
		list.add(new Fruits(2,"pear", "yellow"));
		list.add(new Fruits(4,"watermelon", "green"));
		list.add(new Fruits(1,"cherry", "red"));
		list.add(new Fruits(3,"apple", "red"));
		//此处创建一个比较器
		FruitsCompare fc=new FruitsCompare();
		Collections.sort(list,fc);
		
		Iterator<Fruits> it = list.iterator();
		while(it.hasNext()) {
			System.out.println(it.next());
		}
	}
}

三、Comparable接口和Comparator

       1、两个接口都是泛型接口;

       2、前者需要在需要比较的类中内嵌代码,并且之后不容易改动;

            后者是独立与要比较的类,并且能根据使用情形,为同一个类设计多个不同情况下使用的比较器,同时也可以灵活的控制升降排序方式,较为灵活,加入在设计类时没有考虑到compare的问题,那么在后期进行改动的时候,使用Comparator接口无疑是最好的选择。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值