在一次采访中询问了这个问题。除了Collections.sort()之外,还有哪些其他方法。
答案 0 :(得分:7)
Comparable<T>
和Comparator<T>
是所有标准Java排序选项使用的标准接口(除原始数组之外的所有选项都是如此)。
在Java语言中,任何实现Comparable的Class都有一个“自然顺序”。 (从技术上讲,它必须实现{E = 1}},其中E匹配自身,以获得自然顺序)。可以使用外部比较器对没有自然顺序的类进行排序。比较器也可用于实现针对自然顺序运行的排序顺序(例如,按字母顺序降序排序字符串)。
这些原则适用于SortedSet<E>
和SortedMap<K,V>
实现,它们使用自然顺序或提供的比较器自动对元素/键进行排序。
这些相同的原则也可以在静态实用程序方法
中找到Arrays.sort(arr)
和
数据Arrays.sort(arr, comparator)
Collections.sort(list)
和Collections.sort(list, comparator)
列表可分别用于排序数组和列表,每个数组和列表都不支持自行排序。
The Guava Library通过提供抽象Ordering
类作为Comparable<? super E>
的基本实现来进一步提高这一点,Comparator
已经包含标准方法,例如提供自身的反向视图和许多方便的排序方法并根据此Ordering
检索。
有关Object Ordering的好文章可以在Sun Java Tutorial的Collection Trail中找到。
答案 1 :(得分:3)
我确信还有更多。
答案 2 :(得分:2)
答案 3 :(得分:1)
Arrays.sort(..)
,或自行实施排序。
答案 4 :(得分:0)
您可以将数据粘贴到SortedSet
(例如TreeSet
)并通过遍历迭代器以排序顺序再次将其拉出。这不是一般的排序方法(因为它不允许重复的条目),但可以用于相当多的数据集。