オブジェクトのを受け入れる別の API でメソッドを呼び出していjava.util.Collection
ます。メソッドを調べたところ、ArrayList
タスクを実行する前に、コレクション内のすべてが新しいものにすぐにコピーされます。
これは私が疑問に思ったことです: このメソッドのパラメーターをすばやく組み立てるために使用できる、絶対的に最も低いオーバーヘッドの Java コレクションは何ですか?
オブジェクトのを受け入れる別の API でメソッドを呼び出していjava.util.Collection
ます。メソッドを調べたところ、ArrayList
タスクを実行する前に、コレクション内のすべてが新しいものにすぐにコピーされます。
これは私が疑問に思ったことです: このメソッドのパラメーターをすばやく組み立てるために使用できる、絶対的に最も低いオーバーヘッドの Java コレクションは何ですか?
それは要素をコピーする方法に依存しますが、それがArrayList
このように-copyを作成する場合
new ArrayList<Something>(inputCollection);
またはそれがする場合
someCopy.addAll(inputCollection);
inputCollection.toArray()
次に、それはおそらくによって最もよく実装されるを通過しArrayList
ます。
メモリ フットプリントについて話している場合は、memory-measurer のこの表を見てください。がありませんが、( ) の代わりになる可能性があります。Arrays$ArrayList
ArrayList
Arrays.asList(...)
更新: github 内のプロジェクトの新しい場所への元のリンクを更新しました。これらの指標は数年前のものであることを考慮してください。
ソースデータによって異なります。
ソース データが既に配列であり、その配列が他のユーザーによって使用されない場合、最速の方法はシン ラッパーを使用することです。
final Object[] source = ...
Collection colllection = new AbstractCollection(){
public Object[] toArray(){ return source; }
// other methods don't matter
}