我有一个实现Comparable接口的类Employee
public class Employee implements Comparable<Employee> {
private int id;
private String name;
private int age;
private long salary;
public Employee(int id, String name, int age, int salary) {
this.id = id;
this.name = name;
this.age = age;
this.salary = salary;
}
@Override
public int compareTo(Employee emp) {
return (this.id - emp.id);
}
@Override
public String toString() {
return "[id=" + this.id + ", name=" + this.name + ", age=" + this.age + ", salary=" +
this.salary + "]";
}
}
我有一个Employee[]
数组我使用Arrays.sort()
Employee[] empArr = new Employee[4];
empArr[0] = new Employee(10, "Mikey", 25, 10000);
empArr[1] = new Employee(20, "Arun", 29, 20000);
empArr[2] = new Employee(5, "Lisa", 35, 5000);
empArr[3] = new Employee(1, "Pankaj", 32, 50000);
Arrays.sort(empArr);
我的问题是如何在内部进行排序,
它是否像emArr[0].compareTo(emArr[1])
那样在需要时交换元素?
我想知道里面是如何进行比较和交换的? Comparatable's compareTo(Object o)
和Comparator's compare(o1,o2)
正在扮演什么角色?
答案 0 :(得分:1)
已经有排序技术用于安排订单中的任何项目集合。像Arrays,Collections这样的Java实用程序类使用这些技术。 要使任何此类排序技术起作用,定义如何确定两个对象中哪一个更大是很重要的。
如果对象的类实现compareTo()
接口,则在Comparable
的实现中提供此信息。
此信息也可以在compare()
类的Comparator
方法的实现中提供。如果您希望根据需求定义不同的顺序(可能在运行时可能基于某个参数),则Comparator类很有用。实体的类可能实现Comparable接口,但我们希望在某些特定情况下排序的顺序不同或基于其他一些参数。
详细了解Comparable
https://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html
和Comparator
https://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html
答案 1 :(得分:0)
Comparable
意味着自然的顺序。一般来说,如果是A.compareTo(B) == 0
,那么A.equals(B) == true
(这是一个并不总是遵循的一般惯例)。
Comparator
。例如,您想要对整数数组进行排序,以便首先显示所有偶数。
Arrays.sort()
正在使用合并排序。有关详细信息,请参阅Arrays API。