我有一個ArrayList
。
如何使用相同的數據實例化新的List
但排序?
我想到了以下幾點:排序複製構造ArrayList
- 使用
ArrayList
拷貝構造函數,然後使用Collections.sort
- 使用
TreeSet
對於選項(1)有複製元素的額外開銷和然後排序。
對於選項(2)重複將被刪除。
這是最好的方法是什麼?
我有一個ArrayList
。
如何使用相同的數據實例化新的List
但排序?
我想到了以下幾點:排序複製構造ArrayList
ArrayList
拷貝構造函數,然後使用Collections.sort
TreeSet
對於選項(1)有複製元素的額外開銷和然後排序。
對於選項(2)重複將被刪除。
這是最好的方法是什麼?
「最好的方式」取決於您的要求:你想刪除重複?使用TreeSet
;你想保留重複嗎?複製,然後排序。試圖從兩者中獲得最快的是過早優化。
請勿使用Treeset
獲取List
的已分類副本。它會刪除重複項。 (除非這是所期望的,但是與創建List
的新分類副本是一個不同的問題)。
使用選項1 - 創建一個新的List
並調用Collections.sort()
,如果需要可能使用您自己的Comparator
。
如果你可以使用第三方庫,然後用Guava這只是
List<Foo> sortedCopy = Ordering.from(comparator).sortedCopy(list);
(披露:我貢獻番石榴)
在Java 8,你可以使用流:
ArrayList<Integer> myArrayList = new ArrayList();
myArrayList.add(4);
myArrayList.add(6);
List<Integer> myNewSortedList = myArrayList.stream().sorted().collect(Collectors.asList());
但是,上面的列表不得突變。如果你想,你可以代替收集作爲ArrayList
:
myArrayList<Integer> myNewSortedList = myArrayList.stream().sorted().collect(Collectors.toCollection(ArrayList::new));
s/asList/toList / – Demyn
假設你想那些重複的,使用選項1,有沒有更好的辦法,我可以建議,除非您能向我們提供有關其包含的數據的詳細信息。 – st0le