web-dev-qa-db-ja.com

ArrayListのサイズを変更する方法

私はC++の出身ですが、

_ArrayList<arrayList<E>> javamatrix 
_

C++では私はただやります

_std::vector<std::vector<T> > cppmatrix;
std::vector<T>vcol(cols);
cppmatrix.resize(rows,vcol);
_

このタスクのArrayListsの組み込みresize()関数が見つからないようです。別のコレクションを使用する必要がありますか? javamatrix.add()でforループを使用する以外に、これを行う方法はありませんか?


P.S要素を編集または追加または削除する前にそのサイズが照会される可能性があるため、そのサイズでコンストラクターで初期化する必要があります。

18
Ismail Marmoush

要素を自動的に作成して追加するresizeに相当するものはありません。これは自分で行う必要があります。ただし、 ensureCapacity はベクターのreserveと同等です。スペースは確保されますが、実際のサイズは変更されません。

16

Arraylistのサイズを変更する必要はありません。最初に渡すサイズは、その開始サイズです。現在のサイズを超えてアイテムを追加しようとすると、自動的にサイズが変更されます。

ドキュメント から:

各ArrayListインスタンスには容量があります。容量は、リストの要素を格納するために使用される配列のサイズです。これは常に、少なくともリストサイズと同じ大きさです。要素がArrayListに追加されると、その容量は自動的に増加します。成長ポリシーの詳細は、要素を追加すると償却時間コストが一定になるという事実を超えて規定されていません。

8
Dave McClelland

ほとんどの場合、(a)要素を追加するとArrayListが自動サイズ変更され、(b)ArrayList <>に格納する値が不明確なため、「resize()」操作は必要ありません。 「null」はあまり役に立ちません。例えば。あなたの場合、とにかくMatrixCellオブジェクトを作成するためにループが必要になるでしょう。

ArrayListのサイズを変更してsmallerにする方法を知りたい読者は、ArrayListが 'resize()'メソッドなしで設計された理由を不思議に思います。おそらくそれは、初心者プログラマーがそのメソッドを見て、ArrayList <>が自動サイズ変更することに気付かない可能性が高いためです。

Javaこのイディオムは次のように機能しますreduce ArrayListのサイズ<>:

    list.subList(n,list.size()).clear();

これは、「subList」が元のArrayList <>を基にしたリストを返すため機能します。したがって、「clear()」は元の「ArrayList <>」を操作します。

4
Tim Cooper

私はこの質問が非常に古いことを知っていますが、このリンクは役立つかもしれません Java arraylist EnsureCapacity not working 、コードは現在のサイズを調整するために「Null」値を追加します。

純粋にensureCapacityを使用する代わりに、ensureSizeを持つことができます

public static void ensureSize(ArrayList<?> list, int size) {

    list.ensureCapacity(size);
    while (list.size() < size) {
        list.add(null);
    }
}
1
neferpitou