Java学习笔记 - 比较器Comparator

本文探讨了Java中Comparator和Comparable的区别。Comparable是集合内部定义的排序方式,通过实现Comparable接口来让类具备比较能力;而Comparator是集合外部实现的排序,通过定义单独的类并实现Comparator接口来实现比较功能。当需要通用的比较方法或不希望破坏类结构时,应使用Comparator。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java中有两个比较器,ComparableComparator,都可以实现对Collection的比较

两者区别如下:

  1. Comparable
    1. 是在集合内部定义的方法实现的排序;
    2. 实现java.lang.Comparable接口,使你自己定义的类具备比较能力,这个接口只有一个方法compareTo
  2. Comparator
    1. 是在集合外部实现的排序
    2. 定义一个单独的类去实现Comparator接口,重写其中的compare方法

以上区别对代码直白的影响是,如果你希望写一个公用的比较方法,适用于多个类,就用Comparator

如果不希望破坏类本身的功能结构,但是希望对其排序,那就单独拎出来写个比较方法,用Comparator

反之用Coparable


Comparable较简单,这里不再举例。以下是Comparator的代码示例。


package testJa;
import java.util.*;

public class ComparatorT implements Comparator{ //继承Comparator
	@Override
	public int compare(Object o1,Object o2){
		int k1 = ((dataObj)o1).value;  //指定比较类中的元素,对于不同的结构体,此处可按情况更改。这里适用于"dataObj"
		int k2 = ((dataObj)o2).value;
		if (k1 > k2){
			return 1; //大于时返回1,小于时返回-1,表示正序排列;反过来是反序排列: 比较规则。
		}
		else{
			return -1;
		}
	}
	public static void main(String [] args){  //测试函数,使用时可忽略
		int len = 10, max = 20, i=0;
		dataObj dos[] = new dataObj[len];
		for(i=0;i<len;i++){
			dos[i] = new dataObj(i,"");
		}
		Arrays.sort(dos, new ComparatorT()); //使用Arrays.sort来排序,第一参数是待排序列,第二参数就是重写的比较函数
	}
}


dataObj结构体如下:

package testJa;

public class dataObj{
	public int value;
	public String source;
	public dataObj(int value, String source){
		this.value = value;
		this.source = source;
	}
}


END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值