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

通用说明 >在collection.sort /类似代码中?

洪星文
2023-03-14
问题内容

我一直使用类似的接口,通过collection.sort为我的班级提供自然的排序。

基本上,如果我有一个person类,我将获得它来实现Comparable接口并提供compareTo的实现。但是在javadocs中Collections.sort的定义中,我看到了这个签名

public static <T extends Comparable<? super T>> void sort(List<T> list)

我根本不了解这个泛型定义?不应该说

<T implements Comparable<T>>

有人可以帮我弄这个吗?


问题答案:

其实,这表示T 可以 实现Comparable<? super T>,而不仅仅是Comparable<T>

例如,这意味着一个Student类可以实现Comparable<Person>,其中Student是的子类Person

public class Person {}

public class Student extends Person implements Comparable<Person> {
    @Override public int compareTo(Person that) {
        // ...
    }
}

在这种情况下,可以按List进行排序,Collections.sort()但只能基于Person的属性进行排序,因为您将Student实例compareTo()作为传入Person(当然,除非您向下转换)。

但是在实践中,您永远不会看到Student类实现Comparable<Person>。那是因为Person可能已经实现了Comparable<Person>,并且Student继承了它的实现。但是,最终结果是相同的:您可以将传递给List<Student>Collections.sort()并对其进行排序Person

之间的差Comparable<T>Comparable<? super T>在更明显重载的版本Collections.sort()的,需要一个Comparator<? super T>

class ByAgeAscending implements Comparator<Person> {
    @Override public int compare(Person a, Person b) {
        return a.getAge() < b.getAge();
    }
}

List<Student> students = getSomeStudents();
Collections.sort(students, new ByAgeAscending());


 类似资料:
  • 问题内容: http://www.java2s.com/Open-Source/Java-Open-Source- Library/7-JDK/java/java/util/concurrent/ConcurrentLinkedQueue.java.htm 上面是ConcurrentLinkedQueue的源代码。我无法理解一种情况。 条件 (p == q) 如何出现在offer方法的以下代码片段

  • public static final int ERROR_CODE_SUCCESS = -1; public static final int ERROR_CODE_INTERNAL_ERROR = 0; public static final int ERROR_CODE_INVALID_REQUEST = 1; public static final int ERROR_CODE_NETWO

  • BQMM/MMEmotionCentre.h 说明: iOS SDK核心头文件 MMEmotionCentreDelegate协议方法 - 表情点击回调 - (void)didSelectEmoji:(MMEmoji *)emoji; didClickGifTab - 点击表情键盘底栏gif按钮的回调 - (void)didClickGifTab; didSelectTipEmoji - 点击

  • 类说明 管理类 Dongtu 版本信息 public static final String VERSION 传入APP_ID和APP_SECRET进行初始化 public static void configure(Context context, String appId, String appSecret) 传入用户信息,包括唯一标识userId、昵称userName、性别gender、

  • 类说明 模型类 DTGif 说明: 动图模型类 /** 图片id */ @property (nonatomic, strong) NSString *imageId; /** 图片名称 */ @property (nonatomic, strong) NSString *text; /** 图片缩略图地址 */ @property (nonatomic, strong) NSString *

  • 类和开放接口 管理类 DongtuStore Android SDK核心文件 注册appId和appSecret,初始化配置,建议在Application.onCreate()中调用。 public static void initConfig(Context context, String appId, String appSecret) 传入用户信息。 public static void