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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!