2012-10-04 51 views
2

我有一個ArrayList
如何使用相同的數據實例化新的List排序
我想到了以下幾點:排序複製構造ArrayList

  1. 使用ArrayList拷貝構造函數,然後使用Collections.sort
  2. 使用TreeSet

對於選項(1)有複製元素的額外開銷和然後排序。
對於選項(2)重複將被刪除。
這是最好的方法是什麼?

+0

假設你想那些重複的,使用選項1,有沒有更好的辦法,我可以建議,除非您能向我們提供有關其包含的數據的詳細信息。 – st0le

回答

4

「最好的方式」取決於您的要求:你想刪除重複?使用TreeSet;你想保留重複嗎?複製,然後排序。試圖從兩者中獲得最快的是過早優化。

2

請勿使用Treeset獲取List的已分類副本。它會刪除重複項。 (除非這是所期望的,但是與創建List的新分類副本是一個不同的問題)。

使用選項1 - 創建一個新的List並調用Collections.sort(),如果需要可能使用您自己的Comparator

7

如果你可以使用第三方庫,然後用Guava這只是

List<Foo> sortedCopy = Ordering.from(comparator).sortedCopy(list); 

(披露:我貢獻番石榴)

1

在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)); 
+0

s/asList/toList / – Demyn