私は持っていArrayList
ます。同じデータでソートされ
た新しいデータをインスタンス化するにはどうすればよいですか?
私は次のことを考えました: List
ArrayList
コピーコンストラクターを使用してから、Collections.sort
- 使う
TreeSet
オプション(1)の場合、要素をコピーしてから並べ替えるという余分なオーバーヘッドがあります。
オプション(2)の場合、重複は削除されます。
このための最良の方法は何ですか?
私は持っていArrayList
ます。同じデータでソートされ
た新しいデータをインスタンス化するにはどうすればよいですか?
私は次のことを考えました: List
ArrayList
コピーコンストラクターを使用してから、Collections.sort
TreeSet
オプション(1)の場合、要素をコピーしてから並べ替えるという余分なオーバーヘッドがあります。
オプション(2)の場合、重複は削除されます。
このための最良の方法は何ですか?
サードパーティのライブラリを使用できる場合、Guavaではこれはまさに
List<Foo> sortedCopy = Ordering.from(comparator).sortedCopy(list);
(開示:私はグアバに貢献します。)
「最善の方法」は要件によって異なります。重複を削除しますか?TreeSet
;を使用します 複製を保持しますか?コピーしてから並べ替えます。2つのうち最も速いものを取得しようとするのは時期尚早の最適化です。
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));
Treeset
のソートされたコピーを取得するためにを使用しないでくださいList
。重複を削除します。(これが望ましいものでない限り、それは、の新しいソートされたコピーを作成することとは別の問題ですList
)。
オプション1-を使用して、新しいものを作成しList
て呼び出します。必要に応じCollections.sort()
て、独自のオプションを使用することもできますComparator
。