繁体   English   中英

我可以在不实施Comparable的情况下使用比较器吗?

[英]Can I use a Comparator without implementing 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<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) 因此,使用该方法比较对象。

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

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);

要创建一个树形图,其中的排序顺序是相反的(在这种情况下)。

是。

比较器和可比较器是两个独立的实体,只是它们的用途相似。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM