为什么Java Collections Framework提供了两种不同的排序方式?

dva*_*ria 5 java sorting collections comparable comparator

如果我有一个我想要排序的元素列表,Java提供了两种方法来解决这个问题.

例如,假设我有一个Movie对象列表,我想按标题对它们进行排序.

我可以这样做的一种方法是通过调用静态java.util.Collections.sort()方法的单参数版本,并将我的电影列表作为单个参数.所以我会调用Collections.sort(myMovieList).为了使其工作,必须声明Movie类以实现java.lang.Comparable接口,并且必须在此类中实现所需的方法compareTo().

另一种排序方法是使用影片列表和java.util.Comparator对象作为参数调用静态java.util.Collections.sort()方法的双参数版本.我会调用Collections.sort(myMovieList,titleComparator).在这种情况下,Movie类不会实现Comparable接口.相反,在构建和维护影片列表本身的主类中,我将创建一个实现java.util.Comparator接口的内部类,并实现一个必需的方法compare().然后我将创建此类的实例并调用sort()的双参数版本.第二种方法的好处是您可以创建无限数量的这些内部类比较器,因此您可以以不同的方式对对象列表进行排序.在上面的例子中,

我的问题是,为什么麻烦学习两种方式在Java中进行排序,当Collections.sort()的双参数版本执行第一个单参数版本所做的所有事情时,还有一个额外的好处就是能够对列表的元素进行排序基于几个不同的标准?在编码时必须记住这一点.你有一个基本机制,用Java来排序列表来了解.

pol*_*nts 14

一个是简洁应该是一个常见的案例(Effective Java 2nd Edition,Item 12:考虑实现Comparable).正如您所指出的,另一个是灵活性和通用性.

相关问题


Bre*_*ail 6

这取决于谁控制订购.如果对象的排序是对象的实现细节,Comparable则更合适.如果对象的排序由调用者控制,那么Comparator更合适.