0

Trove から TXXXXArrayList オブジェクトのサイズを設定するには? たとえば、サイズを設定することは可能TIntArrayListですか?

私が見つけた唯一の方法は、要素(ゼロ)を追加することです。プリミティブ配列の初期化または追加を可能にするバルク メソッドでさえ、要素ごとのコピーを実行します。つまり、作業が 2 倍になります。

プレーンなJavaで配列のサイズを設定することは可能ですが:

int[] array = new int[1000000];

作成され、ゼロで埋められます。Trove は 2 回行います:

TIntArrayList array = new TIntArrayList(new int[1000000]);

最初にプリミティブ配列を割り当て、それをクラス内にコピーします。

ワンステップで行う方法は?

アップデート

Wrap メソッドはスピードアップを可能にしますが、ペイオフとしての成長を禁止します:

TIntArrayList array = TIntArrayList.wrap(new int[1000000]);

更新2

容量はサイズではありません。以下のプログラムは、ゼロを出力してスローしArrayIndexOutOfBoundsExceptionます:

package tests.gnu.trove;

import gnu.trove.list.array.TIntArrayList;

public class Try_Capacity {
    public static void main(String[] args) {

        TIntArrayList array = new  TIntArrayList(10);
        array.ensureCapacity(10);
        System.out.println(array.size());
        array.set(5, 10);

    }
}
4

1 に答える 1

0

int 容量を取るコンストラクターを使用する必要があります。

TIntArrayList( int capacity )

または「ensureCapacity」メソッドを使用します。

ensureCapacity( int capacity )

したがって、あなたの例では次のようにします。new TIntArrayList( 1000000 )

アップデート

「サイズを設定」するには (コレクションを「塗りつぶす」と言う方が適切です)、次に「塗りつぶし」メソッドを使用します。

fill( 0, 999999, 0 )

更新 2

「塗りつぶし」の代わりに、必要な値を持つ配列が既にある場合は、挿入を使用します。

insert( 0, my_existing_array )
于 2014-06-30T21:07:05.947 に答える