compareTo
a.compareTo(b)
:将此对象与指定的对象进行比较以进行排序。
Comparable接口:比较值并返回一个int,它告诉值是否比较小于,等于或大于。
如果您的类对象具有自然顺序,请实现该Comparable<T>
接口并定义此方法。所有具有自然排序实现的Java类Comparable<T>
- 示例:String
,包装类,BigInteger
compare
compare(a, b)
:比较其两个参数的顺序。
比较器接口: 比较两个对象的值。这被实现为的一部分Comparator<T>
界面,并且典型的使用是定义实现此的一个或多个小工具类,传递给方法,例如sort()
或使用通过排序数据结构,例如TreeMap
和TreeSet
。您可能希望为以下内容创建Comparator对象:
两个标红的字段说明一个对象排序,一个是对传的参数进行排序。
compareTo和equal
在Java中我们常使用Comparable接口来实现排序,其中compareTo是实现该接口方法。我们知道compareTo返回0表示两个对象相等,返回正数表示大于,返回负数表示小于。同时我们也知道equals也可以判断两个对象是否相等。
下面的例子用age比较排序,用name比较是否相等
扫描二维码关注公众号,回复:
12682311 查看本文章

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;
}
@Override
public 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;
}
@Override
public 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> {
@Override
public 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);
}