如果我有一个想要排序的元素列表,Java 提供了两种方法来解决这个问题。
例如,假设我有一个 Movie 对象列表,我想按标题对它们进行排序。
我可以做到这一点的一种方法是调用静态 java.util.Collections.sort( ) 方法的单参数版本,并将我的电影列表作为单个参数。所以我会调用 Collections.sort(myMovieList)。为了使其工作,Movie 类必须声明为实现 java.lang.Comparable 接口,并且必须在该类中实现所需的方法 compareTo()。
另一种排序方法是调用静态 java.util.Collections.sort() 方法的双参数版本,其中电影列表和 java.util.Comparator 对象作为参数。我会调用 Collections.sort(myMovieList, titleComparator)。在这种情况下,Movie 类不会实现 Comparable 接口。相反,在构建和维护电影列表本身的主类中,我将创建一个实现 java.util.Comparator 接口的内部类,并实现一个必需的方法 compare()。然后我会创建这个类的一个实例并调用 sort() 的两个参数版本。第二种方法的好处是您可以创建无限数量的这些内部类比较器,因此您可以以不同的方式对对象列表进行排序。在上面的例子中,
我的问题是,当 Collections.sort() 的双参数版本完成第一个单参数版本所做的所有事情时,为什么还要费心学习 Java 中的两种排序方式,但还有一个额外的好处是能够对列表的元素进行排序基于几个不同的标准?在编码时必须牢记在心的事情会少一件事。您将了解一种在 Java 中排序列表的基本机制。