4

私は持っていArrayListます。同じデータでソートされ
た新しいデータをインスタンス化するにはどうすればよいですか? 私は次のことを考えました: List

  1. ArrayListコピーコンストラクターを使用してから、Collections.sort
  2. 使うTreeSet

オプション(1)の場合、要素をコピーしてから並べ替えるという余分なオーバーヘッドがあります
オプション(2)の場合、重複は削除されます。
このための最良の方法は何ですか?

4

4 に答える 4

9

サードパーティのライブラリを使用できる場合、Guavaではこれはまさに

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

(開示:私はグアバに貢献します。)

于 2012-10-04T15:50:14.853 に答える
6

「最善の方法」は要件によって異なります。重複を削除しますか?TreeSet;を使用します 複製を保持しますか?コピーしてから並べ替えます。2つのうち最も速いものを取得しようとするのは時期尚早の最適化です。

于 2012-10-04T11:57:57.097 に答える
5

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));
于 2017-05-17T15:31:29.103 に答える
3

Treesetのソートされたコピーを取得するためにを使用しないでくださいList。重複を削除します。(これが望ましいものでない限り、それは、の新しいソートされたコピーを作成することとは別の問題ですList)。

オプション1-を使用して、新しいものを作成しListて呼び出します。必要に応じCollections.sort()て、独自のオプションを使用することもできますComparator

于 2012-10-04T12:24:33.153 に答える