我可以使用比较器而不实现Comparable吗?

是否可以在不实现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 { public int compare(Student s1, Student s2) { if (s1.getAge() == s2.getAge()) { return 0; } else { return s1.getAge() < s2.getAge() ? -1 : 1; } } 

和:

 List students = new ArrayList(); students.add(new Student(1, "bob", 15)); students.add(new Student(2, "Jane", 14)); students.add(new Student(3, "Gary", 16)); SortedSet set1 = new TreeSet(new AgeComparator()); set1.addAll(students); for (Student student : set1) { // age order } 

Comparator具有public int compare(T lhs, T rhs) 。 所以使用该方法来比较对象。

此外,已排序的集合将接受Comparator作为参数,因此您可以(例如)说:

 Comparator comparator = new Comparator() { @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(comparator); 

创建一个树形图,其中排序顺序(在这种情况下为int)反转。

是。

Comparator和Comparable是两个独立且独立的实体,只是它们的目的相似。

在您的代码中只需执行: comp.compare(obj1, obj2)