Java 的Comparable 和 Comparator

来源:互联网 发布:mac装win10 wifi不稳定 编辑:程序博客网 时间:2024/05/16 08:47


定义

顾名思义,Comparator是比较器,用于集合类排序时的参数,不需要在类中添加额外的代码
Comparable,可比较的,为一个比较的接口,类需要实现这个接口。集合类排序时候根据此类的compareTo 方法比较大小。

实现Comparable接口

下面demo为实现Comparable接口的方式,类内部需要实现compareTo 方法
package javaecho;import java.util.Arrays;public class MainClass implements Cloneable{public static void main(String args[]) throws CloneNotSupportedException{User u1 = new User(18,"allen");User u2 = new User(20,"jack");User[] list = {u2,u1};for (User u :list)System.out.println(u.getName());Arrays.sort(list);for (User u :list)System.out.println(u.getName());}}class User implements Comparable<User>{private int age;private String name;public User(int age,String name){this.age= age;this.name =name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic int compareTo(User arg0) {if(this.age>arg0.getAge())return 1;else if (this.age<arg0.getAge())return -1;elsereturn 0;}public boolean equals(Object arg0){return true;}}

使用Comparator比较器

比较器的好处是灵活,无需在类中实现代码。但在集合类排序的时候,或者构造有序类集合时,需要作为参数传人进去。

package javaecho;import java.util.Arrays;import java.util.Comparator;public class MainClass implements Cloneable{public static void main(String args[]) throws CloneNotSupportedException{User u1 = new User(18,"allen");User u2 = new User(20,"jack");User[] list = {u2,u1};for (User u :list)System.out.println(u.getName());Arrays.sort(list, new Comparator<User>(){@Overridepublic int compare(User arg0, User arg1) {return arg0.getAge()> arg1.getAge() ? 1: (arg0.getAge()==arg1.getAge() ? 0: -1);}});for (User u :list)System.out.println(u.getName());}}class User{private int age;private String name;public User(int age,String name){this.age= age;this.name =name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}}



0 0
原创粉丝点击