- ベストアンサー
ArrayListのデバッグ方法について
ArrayListで、 remove(2),Remove(3)した後に、 addすると(2)の位置へデータが 格納されるのでしょうか? ArrayList全体が現在どういう状態か、 簡単に確認する方法あったら知りたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ArrayListは、removeを使うと、 オブジェクトが一つだけ取り除かれ、 だるま落としのように全体の長さが縮みます。 addは、インデックスを指定しなければ、リストの最後にオブジェクトが格納されます。 内部のオブジェクト格納の形式が異なるだけで、 ArrayListとLinkedListはほぼ同じような動作をします。 実際の動作がわからなくて困るときは、 「必殺ソースコード参照」があります。 JDKに含まれているsrc.zipというのがJDK自体のソースコードでして、 解凍して見ることができます。 ArrayList.java中のremoveやaddを見てみるとよくわかると思います。 それから、ArrayList全体を調べる必要があった場合、 toArrayメソッドで一度配列にしてやる方法があります。
その他の回答 (1)
- shotaro777
- ベストアンサー率21% (4/19)
ArrayListのremoveメソッドには int numMoved = size - index - 1; if (numMoved > 0) System.arraycopy(elementData, index+1, elementData, index, numMoved); elementData[--size] = null; // Let gc do its work と書かれています。 3行目のSystem.arraycopyによってデータを詰めておれ,4行目で配列の最後にnullが入っていることから,質問の例であったremove(2)をしたら3番目の要素が移動してきます。 というわけで,質問の答えはfalseです(笑)
お礼
おっしゃる通りの結果で、 ようやく理解できました。ありがとうございます。
お礼
src.zipいいですね。 いろいろと教えていただきありがとうございます。