JavaのArrayListでの領域確保方法について

投稿者: Anonymous

 JavaのArrayListでは、「初期化時に確保するサイズを指定する」「ArrayList#ensureCapacityを使う」ことで、あらかじめ領域を確保できますよね?

ArrayList<Integer> hoge = new ArrayList<Integer>(100); //確保1
hoge.ensureCapacity(100); //確保2

 しかしどちらの書き方でも、C++でのstd::vectorにおけるreserve()のように「領域を確保する」だけであって、resize()のように「要素数が増える」わけじゃありませんよね。つまり、ArrayList#addで後ろに要素を追加はできるものの、ArrayList#setで特定位置に値を代入しようとするとIndexOutOfBoundsExceptionが生じてしまうのです。
 現在ではArrayList#addとforループでとりあえず全要素に0を敷き詰めて対処していますが、もっと綺麗に書く方法は無いものでしょうか。

解決

tai2 さんの回答と同じ事をしていますが、以下の様にも書けます。

ArrayList<Integer> hoge = new ArrayList<Integer>(Arrays.asList(new Integer[100]));

ただ、nCopies と異なって初期化はされません。

hoge.set(0, 0);
System.out.println(hoge);
=>
[0, null, null, ...
回答者: user9156

Leave a Reply

Your email address will not be published. Required fields are marked *