java 接口之 Comparable<T> 与 Comparator <T>

2023-12-16 12:38:04

Comparable

Comparable<T> 接口是Java中的一个泛型接口,用于提供对象之间的自然排序顺序。实现了 Comparable<T> 接口的类可以通过其自身的比较逻辑来定义对象的顺序。这个接口定义了一个方法:

public interface Comparable<T> {
    int compareTo(T o);
}

其中,compareTo 方法用于比较当前对象与参数对象的顺序。返回值是一个整数,具体的含义如下:

  • 如果当前对象小于参数对象,则返回负整数。
  • 如果当前对象等于参数对象,则返回零。
  • 如果当前对象大于参数对象,则返回正整数。

通过实现 Comparable<T> 接口,可以在使用排序算法(例如 Arrays.sort()Collections.sort())时方便地进行对象排序。这样的排序是对象自身定义的自然顺序,与外部比较器(Comparator)相对应,后者允许在不修改类代码的情况下定义多种不同的排序方式。

以下是一个简单的示例,演示了如何实现 Comparable<T> 接口:

package demo;

import java.util.Arrays;

public class Circlecp implements Comparable<Circlecp> {
	double radius;
	
	public double getArea(){
		return radius*radius*Math.PI;
	}
		
	public void setradius(double radius) {
		this.radius = radius;
	}

	Circlecp(double radius){
		this.radius = radius;
	}

	//对接口中的抽象方法进行实现
	@Override
	public int compareTo(Circlecp circle) {
		if(getArea()>circle.getArea())
			return 1;
		else if(getArea()<circle.getArea())
			return -1;
		else
			return 0;
	}
	public static void main(String[]args) {
		Circlecp[] circles = new Circlecp[] {
				new Circlecp(3.4),new Circlecp(2.5),new Circlecp(5.8),
		};
		
		System.out.println(circles[0].compareTo(circles[2]));

	

}

  • 分析:
  • 在该例子中定义Circlecp 类,在main 方法中定义了Circlecp 的实例的一个数组,然后我们调用 其中一个实例的compareTo 方法,其中以另一个实例作为参数实例,这样就会返回相对应的两个对象的比较结果

Comparator 接口

Comparator 接口是 Java 中用于比较对象的接口,它允许开发者在不修改类本身的情况下定义多种不同的比较方式。Comparator 接口的定义如下:

@FunctionalInterface
public interface Comparator<T> {
    int compare(T o1, T o2);
    
    // 其他默认方法和静态方法省略
}

compare 方法用于比较两个对象的顺序。返回值是一个整数,具体的含义与 Comparable 接口中的 compareTo 方法相同:

  • 如果 o1 小于 o2,则返回负整数。
  • 如果 o1 等于 o2,则返回零。
  • 如果 o1 大于 o2,则返回正整数。

Comparator 接口允许开发者通过实现该接口来定义自己的比较逻辑。通常,比较器被用在排序算法中,例如 Collections.sort()Arrays.sort(),以及诸如优先队列等数据结构。

以下是一个简单的示例,演示了如何使用 Comparator 接口来比较字符串长度:

package demo;
import java.util.*;

import java.util.Arrays;

public class LengthComparator implements Comparator<String> {
	
	public int compare(String first,String second) {
		return first.length()- second.length();
	}
	public static void main(String[] args) {
		String[] ss = {"this","is","a","test","string"};
		Arrays.sort(ss,new LengthComparator());
		
		for(String s : ss)
			System.out.print(s+" ");
	}
}

在这个例子中,StringLengthComparator 类实现了 Comparator<String> 接口,通过比较字符串的长度来定义字符串的排序顺序。

  • 输出结果: a is this test string

文章来源:https://blog.csdn.net/weixin_74850661/article/details/135030339
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。