admin 管理员组

文章数量: 1086019

compare()和compareTo()区别

compareTo

a.compareTo(b):将此对象与指定的对象进行比较以进行排序。

Comparable接口:比较值并返回一个int,它告诉值是否比较小于,等于或大于。

如果您的类对象具有自然顺序,请实现该Comparable<T>接口并定义此方法。所有具有自然排序实现的Java类Comparable<T>- 示例:String,包装类,BigInteger

 

compare

compare(a, b):比较其两个参数的顺序。

比较器接口: 比较两个对象的值。这被实现为的一部分Comparator<T>界面,并且典型的使用是定义实现此的一个或多个小工具类,传递给方法,例如sort()或使用通过排序数据结构,例如TreeMapTreeSet。您可能希望为以下内容创建Comparator对象:

 

两个标红的字段说明一个对象排序,一个是对传的参数进行排序。

 

compareTo和equal

在Java中我们常使用Comparable接口来实现排序,其中compareTo是实现该接口方法。我们知道compareTo返回0表示两个对象相等,返回正数表示大于,返回负数表示小于。同时我们也知道equals也可以判断两个对象是否相等。

下面的例子用age比较排序,用name比较是否相等

public class Student implements Comparable<Student> {private String id;private String name;private int age;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Student(String id, String name, int age){this.id = id;this.name = name;this.age = age;}@Overridepublic boolean equals(Object obj){if(obj == null){return false;}if(this == obj){return true;}if(obj.getClass() != this.getClass()){return false;}Student student = (Student)obj;if(!student.getName().equals(getName())){return false;}return true;}@Overridepublic int compareTo(Student student) {//升序return this.age - student.age;//降序//return student.age - this.age;}
}

客户端主程序

    public static void main(String[] args){List<Student> list = new ArrayList<>();list.add(new Student("1", "chenssy1", 24));list.add(new Student("2", "chenssy1", 26));Collections.sort(list);   //排序}

compare

事例演示

public class Teacher {private int age;public Teacher(int age) {this.age = age;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}

比较器

public class TeacherComparator implements Comparator<Teacher> {@Overridepublic int compare(Teacher o1, Teacher o2) {//升序return o1.getAge() - o2.getAge();//降序//return o2.getAge() - o1.getAge();}
}

客户端主程序

    public static void main(String[] args){List<Teacher> list = new ArrayList<>();list.add(new Teacher(18));list.add(new Teacher(30));list.add(new Teacher(22));list.add(new Teacher(43));list.add(new Teacher(21));Collections.sort(list, new TeacherComparator());System.out.println(list);}

 

本文标签: compare()和compareTo()区别