当前位置: 首页 > 面试题库 >

我可以在不实现Comparable的情况下使用Comparator吗?

蔚学真
2023-03-14
问题内容

是否可以在不实现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
}


 类似资料:
  • 问题内容: 如果我要使用DefaultServeMux(我将其指定为ListenAndServe的第二个参数来指定),那么我可以访问,您可以在Go Wiki的以下示例中看到该: 在当前代码中,我无法使用DefaultServeMux,即我将自定义处理程序传递给ListenAndServe 因此,我没有内置的代码。但是,我必须将一些授权代码修改为需要类似的授权代码。例如,如果我一直在使用Defaul

  • 问题内容: JavaScript具有词法作用域,这意味着从函数内部访问的非局部变量在定义时将解析为该函数的父级作用域中存在的变量。这与动态作用域相反,在动态作用域中,从函数内部访问的非局部变量在调用时将解析为该函数的调用范围中存在的变量。 上面的程序以词法范围的语言先打印1,然后再打印2,然后以动态范围的语言先打印3,然后再打印1。由于JavaScript具有词法范围,因此将显示1,然后显示2,如

  • 是否可以在没有实体的情况下使用JpaRepository?在这种情况下,将其替换为DTO。 如下示例所示 这种情况有替代方案吗? 注意:DTO已经映射,但我不想创建视图来将此DTO转换为实体。 我已经验证了这个主题,但没有重大进展,请使用无实体的JpaRepository交互样式 我在试这个 接口- 公共接口BffDTOInterface2{ } 我有这个错误

  • HttpServletRequest请求,HttpServletResponse响应 但是在典型的JSF项目中,我根本没有看到这些类的使用,相反,我看到的只是托管bean和Facelet页面。 但是,在web.xml中,我看到:

  • 我有一个Employee类,它有如下3个字段。 为此,我希望根据员工姓名(empName)排序,如果多个员工的姓名相同,则根据员工id(empId)排序。 为此,我编写了一个自定义比较器,使用java.util.比较器如下所示。 我已经创建了8个Employee对象并添加到ArrayList中,如下所示。 并使用上述比较器对列表进行如下排序。 它工作得非常好。但这可以使用类似的方法来完成,如下所示

  • 问题内容: 如果要使用Linq-SQL,还必须将DB Table拖到设计器表面以创建实体类。 我一直喜欢我的应用程序中的完全控制权,并且不喜欢dotnet创建的类。 是否可以使用我自己的数据访问层实体类在Linq和DB之间提供此连接? 我该如何完成? 问题答案: 您可以使用Linq-to-SQL非常轻松地编写自己的类-只需使用一些属性绘制类即可。 例如,这是我的一个项目中有一个非常简单的表,它可以