是否可以在不实现 Comparable 类的情况下使用 Comparator ?例如,如果我有以下情况:
MyClass {
Comparator comp;
OrderedListInheritance(Comparator c) {
this.comp = c;
}
}
然后我可以使用 comp 比较两个对象吗?如果是这样,我将如何去做?
谢谢...
是否可以在不实现 Comparable 类的情况下使用 Comparator ?例如,如果我有以下情况:
MyClass {
Comparator comp;
OrderedListInheritance(Comparator c) {
this.comp = c;
}
}
然后我可以使用 comp 比较两个对象吗?如果是这样,我将如何去做?
谢谢...
你不使用Comparable
. 你用Comparator
.
Comparable
是由对象实现的接口,用于指定它们与相同类型的其他对象的排序顺序。
Comparator
是一个通用接口,它只接受两个对象并告诉您它们的排序顺序。所以你可以这样做:
public class Student {
private final int id;
private final String name;
private final int age;
public Student(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public int getId() { return id; }
public String getName() { return name; }
public int getAge() { return age; }
}
和:
public class AgeComparator implements Comparator<Student> {
public int compare(Student s1, Student s2) {
if (s1.getAge() == s2.getAge()) {
return 0;
} else {
return s1.getAge() < s2.getAge() ? -1 : 1;
}
}
和:
List<Student> students = new ArrayList<Student>();
students.add(new Student(1, "bob", 15));
students.add(new Student(2, "Jane", 14));
students.add(new Student(3, "Gary", 16));
SortedSet<Student> set1 = new TreeSet<Student>(new AgeComparator());
set1.addAll(students);
for (Student student : set1) {
// age order
}
Comparator<T>
有public int compare(T lhs, T rhs)
。所以使用该方法来比较对象。
此外,排序后的集合将接受 aComparator
作为参数,因此您可以(例如)说:
Comparator<Integer> comparator = new Comparator<Integer>() {
@Override public int compare(Integer lhs, Integer rhs) {
if (rhs.intValue() < lhs.intValue())
return -1;
else if (rhs.intValue() > lhs.intValue())
return 1;
else
return 0;
}
};
new TreeMap<Integer, Integer>(comparator);
创建一个排序顺序(在这种情况下)颠倒的树形图。
是的。
Comparator 和 Comparable 是两个独立的实体,只是它们的目的是相似的。
在您的代码中只需执行以下操作:comp.compare(obj1, obj2)