簡體   English   中英

Java:就地排序 ArrayList

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM