您现在的位置是:首页 > 数码 > 

java中Comparable的使用

2025-07-24 11:46:34
java中Comparable的使用 Comparable是个排序接口,若一个类实现了该接口,那么该类的数组和列表就可以通过Collecti.sort或Arrays.sort进行自动排序。该接口中的只有一个compareTo(T o)方法: public interface Comparable<T> {public int comp

java中Comparable的使用

Comparable是个排序接口,若一个类实现了该接口,那么该类的数组和列表就可以通过Collecti.sort或Arrays.sort进行自动排序。该接口中的只有一个compareTo(T o)方法:

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

实现该接口的类通过重写该方法来定义该类的排序方式;下面我们就通过一个简单的例子来了解下该类的使用。

首先我们定义一个没有实现该方法的实体类Person

public class Person {private int age;private String name;public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getame() {return name;}public void setame(String name) { = name;}public Person() {}public Person(int age, String name) {this.age = age; = name;}@Overridepublic String toString() {return Person{ age=  age , name=	  name  	\		 	}	;}}

然后写一个测试类来测试当前Person是否支持排序:

public class ComparableTest {public static void main(String[] args) {Person[] pers = new Person[]{new Person(10, 张三),new Person(15, 李四),new Person(5, 王五)};println(排序前);for(Person p : pers){println(());}Arrays.sort(pers);//实现Comparable接口后可以通过sort方法来自动排序println(排序后);for(Person p : pers){println(());}}
}

执行结果为:

排序前
Person{age=10, name=	张三	}
Person{age=15, name=	李四	}
Person{age=5, name=	王五	}
Exception in thread main java.lang.ClassCastException: XXXXXXXXX.Person cannot be cast to java.lang.Comparableat java.util.(ComparableTimSort.java:20)at java.util.ComparableTimSort.sort(ComparableTimSort.java:188)at java.util.Arrays.sort(Arrays.java:1246)at XXXXXXXXX..(ComparableTest.java:1)Process finished with exit code 1

报错java.lang.ClassCastException:Person cannot be cast to java.lang.Comparable.大致意思是说Person类没有实现java.lang.Comparable接口。

下面我们修改下Person类使其实现Comparable类:

public class Person implements Comparable<Person>{private int age;private String name;public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getame() {return name;}public void setame(String name) { = name;}public Person() {}public Person(int age, String name) {this.age = age; = name;}@Overridepublic String toString() {return Person{ age=  age , name=	  name  	\		 	}	;}@Overridepublic int compareTo(Person o) {return this.getAge()-o.getAge();}

然后我们看下测试结果:

排序前
Person{age=10, name=	张三	}
Person{age=15, name=	李四	}
Person{age=5, name=	王五	}
排序后
Person{age=5, name=	王五	}
Person{age=10, name=	张三	}
Person{age=15, name=	李四	}Process finished with exit code 0

这里是定义其按照年龄升序排序的,你也可以让其降序排序:只需要修改Person中的compareTo(Person 0)方法。具体如下:

//修改前(按照年龄升序)
@Overridepublic int compareTo(Person o) {return this.getAge()-o.getAge();}
//修改后(按照年龄降序)
@Overridepublic int compareTo(Person o) {return o.getAge()-this.getAge();}

修改后的测试结果如下:

排序前
Person{age=10, name=	张三	}
Person{age=15, name=	李四	}
Person{age=5, name=	王五	}
排序后
Person{age=15, name=	李四	}
Person{age=10, name=	张三	}
Person{age=5, name=	王五	}

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/shuma/767873.html

相关标签:无
上传时间: 2023-12-27 15:05:38
留言与评论(共有 14 条评论)
本站网友 张志鋆
20分钟前 发表
String name) {this.age = age; = name;}@Overridepublic String toString() {return Person{ age=  age 
本站网友 逗利是
30分钟前 发表
pers){println(());}} } 执行结果为: 排序前 Person{age=10
本站网友 活动牙
1分钟前 发表
name= 王五 } 排序后 Person{age=5
本站网友 高端消费
6分钟前 发表
Person cannot be cast to java.lang.Comparable.大致意思是说Person类没有实现java.lang.Comparable接口
本站网友 什么是h股
25分钟前 发表
name= 王五 } 排序后 Person{age=5
本站网友 墙面裂缝怎么处理
26分钟前 发表
name= 王五 } Exception in thread main java.lang.ClassCastException
本站网友 程之
23分钟前 发表
name= 李四 } Person{age=10
本站网友 苏州平江万达广场
1分钟前 发表
name= 张三 } Person{age=15
本站网友 天津每日房价
9分钟前 发表
name= 王五 } 排序后 Person{age=15
本站网友 17767
18分钟前 发表
王五)};println(排序前);for(Person p
本站网友 汝南二手房
26分钟前 发表
name= 李四 } Person{age=5
本站网友 zen
24分钟前 发表
name= 张三 } Person{age=15
本站网友 hackathon
20分钟前 发表
XXXXXXXXX.Person cannot be cast to java.lang.Comparableat java.util.(ComparableTimSort.java