0
import java.util.ArrayList;

public class ArrayTest {

    private static ArrayList<String> list = new ArrayList<String>();


    public static void printList () {
        System.out.println("Printing the list");
        for (int i = 0; i < list.size(); i++)
        {
            if (list.get(i) != null)
                System.out.println(i + " => " + list.get(i));
        }   
    }

    public static void add(Integer index, String val) {
        while(list.size() <= index)
            list.add(null);
        list.add(index, val);   
    }   

    public static void main(String[] args) {
        ArrayTest.add(8, "cover");
        ArrayTest.printList();
        ArrayTest.add(6, "and");
        ArrayTest.printList();
    }   

}

次の出力を生成します

Printing the list
8 => cover
Printing the list
6 => and
9 => cover

この関数は、例外add(Integer index, String val)を回避するためのチェックとして、適切な数の null をリストに追加します。IndexOutOfBoundsExceptionリストに「and」を追加すると、「カバー」の位置がリスト内でさらにプッシュされる理由を誰かが説明できますか?

4

3 に答える 3

3

使用したadd メソッドは、指定したインデックスに要素を挿入するためです。この位置の既存の要素を置き換えるのではなく、新しい要素を追加するので、そこから末尾に向かってインデックス位置を追加します。

値を置き換える必要がある場合は、set メソッドを使用します。

于 2013-04-14T18:15:08.013 に答える
2

これは、メソッドの実際の仕様であるためです。List.add(int index, E element)

指定された要素をこのリストの指定された位置に挿入します (オプションの操作)。現在その位置にある要素 (存在する場合) と後続の要素を右にシフトします (インデックスに 1 を追加します)。

「理由」について:これは、指定された位置の要素を上書きしないようにするために行われます。

于 2013-04-14T18:16:12.130 に答える