打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Java常用类库
Java常用类库--比较器
Comparable接口:
详细信息:
方法摘要
int
compareTo(T o)
比较此对象与指定对象的顺序。
方法详细信息
compareTo
int compareTo(T o)
比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。
实现类必须确保对于所有的 x 和 y 都存在 sgn(x.compareTo(y)) == -sgn(y.compareTo(x)) 的关系。(这意味着如果 y.compareTo(x) 抛出一个异常,则 x.compareTo(y) 也要抛出一个异常。)
实现类还必须确保关系是可传递的:(x.compareTo(y)>0 && y.compareTo(z)>0) 意味着 x.compareTo(z)>0。
最后,实现者必须确保 x.compareTo(y)==0 意味着对于所有的 z,都存在 sgn(x.compareTo(z)) == sgn(y.compareTo(z))。 强烈推荐 (x.compareTo(y)==0) == (x.equals(y)) 这种做法,但并不是 严格要求这样做。一般来说,任何实现 Comparable 接口和违背此条件的类都应该清楚地指出这一事实。推荐如此阐述:“注意:此类具有与 equals 不一致的自然排序。”
在前面的描述中,符号 sgn(expression) 指定 signum 数学函数,该函数根据 expression 的值是负数、零还是正数,分别返回 -1、0 或 1 中的一个值。
参数:
o- 要比较的对象。
返回:
负整数、零或正整数,根据此对象是小于、等于还是大于指定对象。
抛出:
ClassCastException- 如果指定对象的类型不允许它与此对象进行比较。
Comparable是个泛型接口,只有一个方法,其返回值有三种取值,
·1表示大于
·0表示等于
·-1表示小于
看如下程序:
package ArraysTest;
import java.util.*;
class Test implements Comparable<Test>{//继承Comparable接口
String name;
int age;
public Test(String name,int age){
this.name=name;
this.age=age;
}
public int compareTo(Test a){//覆写compareTo方法,指示年龄从大到小排序
if(age<a.age)return 1;
else if(age==a.age)return 0;
else return -1;
}
public String toString(){
return name+" "+age;
}
}
public class ArraysTest001 {
public static void main(String args[]){
Test t[]=new Test[5];
t[0]=new Test("Hello1",23);
t[1]=new Test("Hello2",34);
t[2]=new Test("Hello3",12);
t[3]=new Test("Hello4",23);
t[4]=new Test("Hello5",89);
Arrays.sort(t);
for(int i=0;i<5;i++){
System.out.println(t[i]);
}
}
}
排序方法为二叉排序。
Comparator接口:
方法摘要
int
compare(T o1, T o2)
比较用来排序的两个参数。
boolean
equals(Object obj)
指示某个其他对象是否“等于”此 Comparator。
可以看看Arrays类的这两个sort方法:
static
sort(T[] a, Comparator<? super T> c)
根据指定比较器产生的顺序对指定对象数组进行排序。
static
sort(T[] a, int fromIndex, int toIndex, Comparator<? super T> c)
根据指定比较器产生的顺序对指定对象数组的指定范围进行排序。
这两个方法不需要本类直接继承Comparable接口但是需要使用Comparator接口指定排序方法:
package ArraysTest;
import java.util.*;
class Test{
String name;
int age;
public Test(String name,int age){
this.name=name;
this.age=age;
}
public String toString(){
return name+" "+age;
}
}
class Test1 implements Comparator<Test>{
public int compare(Test a,Test b){
if(a.age>b.age)return 1;
else if(a.age==b.age)return 0;
else return -1;
}
}
public class ArraysTest001 {
public static void main(String args[]){
Test t[]=new Test[5];
t[0]=new Test("Hello1",23);
t[1]=new Test("Hello2",34);
t[2]=new Test("Hello3",12);
t[3]=new Test("Hello4",23);
t[4]=new Test("Hello5",89);
Arrays.sort(t,new Test1());
for(int i=0;i<5;i++){
System.out.println(t[i]);
}
}
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
java中的Comparator和Comparable比较器的用法
Java深入了解TreeSet
java.lang.Comparable接口
Java比较两个对象大小的三种方法详解
cannot be cast to java.lang.Comparable解决办法
SCJP笔记
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服