[英]Java: sorting an ArrayList in place
在 Java 的標准庫中,是否有一種方法可以讓人們就地對ArrayList
進行排序,即使用O(1)
額外存儲?
Collections.sort(List<T>)
不滿足這個要求,因為它
將指定的列表轉儲到數組中,對數組進行排序,然后遍歷列表,從數組中的相應位置重置每個元素。
如果標准庫中什么都沒有,那么可以使用哪些第三方庫來做到這一點?
您可以提取底層數組(例如反射)並對其執行 Arrays.sort(array, 0, list.size()) 。
Java 7 在對數組進行排序之前不會復制 Arrays.sort() 中的數組。 在 Java 6 中,這意味着 Java 6 中的 Collections.sort() 實際上復制了底層數組 TWICE 來執行排序。
從 Java 8 開始, List
接口具有默認的void sort(Comparator<? super E> c)
API,您可以使用它就地對實例進行排序。
該列表必須是可修改的、可迭代的,並且它的元素可以相互比較。
Collections.sort()
可以與任何 List 實現一起使用,這就是它無法正常工作的原因(合並 LinkedList 很困難並且會犧牲穩定性)。
如果您真的擔心就地排序,則必須推出自己的排序功能。 除非你的 List 很長,否則它真的不值得你花時間。
Arrays.sort(Object[])
執行相同的合並排序,並由Collections.sort()
內部調用(至少在 openjdk 中)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.