9

オブジェクトのを受け入れる別の API でメソッドを呼び出していjava.util.Collectionます。メソッドを調べたところ、ArrayListタスクを実行する前に、コレクション内のすべてが新しいものにすぐにコピーされます。

これは私が疑問に思ったことです: このメソッドのパラメーターをすばやく組み立てるために使用できる、絶対的に最も低いオーバーヘッドの Java コレクションは何ですか?

4

3 に答える 3

6

それは要素をコピーする方法に依存しますが、それがArrayListこのように-copyを作成する場合

new ArrayList<Something>(inputCollection);

またはそれがする場合

someCopy.addAll(inputCollection);

inputCollection.toArray()次に、それはおそらくによって最もよく実装されるを通過しArrayListます。

于 2011-02-15T14:51:22.410 に答える
1

メモリ フットプリントについて話している場合は、memory-measurer のこの表を見てください。がありませんが、( ) の代わりになる可能性があります。Arrays$ArrayListArrayListArrays.asList(...)

更新: github 内のプロジェクトの新しい場所への元のリンクを更新しました。これらの指標は数年前のものであることを考慮してください。

于 2011-02-15T18:32:28.520 に答える
0

ソースデータによって異なります。

ソース データが既に配列であり、その配列が他のユーザーによって使用されない場合、最速の方法はシン ラッパーを使用することです。

final Object[] source = ...

Collection colllection = new AbstractCollection(){
    public Object[] toArray(){ return source; }
    // other methods don't matter
}
于 2011-02-15T17:50:16.380 に答える