java中Comparable的使用
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组装电脑配置单推荐报价格
上传时间: 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 |