1

ArrayListについて興味深いものを見つけました。

ArrayList<String> list = new ArrayList<String>();
list.add(0, "0-element");
list.add(1, "1-element");
list.add(2, "2-element");

しかし、要素が未知の順序で来ていない場合、例えば。

ArrayList<String> list = new ArrayList<String>();
list.add(1, "1-element");  // IndexOutOfBoundsException
list.add(2, "2-element");
list.add(0, "0-element");

IndexOutOfBoundsExceptionが発生します。ここでの唯一のオプションは、リストの代わりにマップを使用することですか?

4

7 に答える 7

4

多かれ少なかれ、ええ。インデックスに要素があるが;がないList状態にすることはできません。現在に存在しないインデックスに要素を追加することはできません。ii-1List

于 2012-11-26T17:45:32.773 に答える
3

javadocを読むと、次のように表示されます。

このリストの指定された位置に指定された要素を挿入します。現在その位置にある要素(存在する場合)と後続の要素を右にシフトします(インデックスに1つ追加します)。
IndexOutOfBoundsExceptionをスローします-インデックスが範囲外の場合(index <0 || index> size())

したがって、最初の例では、リストは空で、要素は位置0に挿入されます(これはまだ存在しませんが、最初に使用可能です-index = 0 <= size()= 0)。

2番目の例では、位置1に挿入しようとしましたが、位置0にはまだ何もないため、失敗します(index = 1> size()= 0)。

于 2012-11-26T17:45:44.290 に答える
1

これは文書化されています:

IndexOutOfBoundsException-インデックスが範囲外の場合(index <0 || index> size())

追加する前にテストできます:

if (pos>=list.size()) list.add(element);
else list.add(pos, element);  

しかし、あなたがすることは奇妙です(そしてそれがテストと追加/挿入を行う方法がない理由です)。本当にインデックスに追加しますか(つまり、以前に挿入された要素の一部を移動しますか)?任意のインデックスに要素を設定できるようにする標準の配列は、必要なものではありませんか?

于 2012-11-26T17:45:42.907 に答える
1

ArrayListでメソッドの実装を確認するだけaddで、答えが得られます

public void add(int index, E element) {
    if (index > size || index < 0)
        throw new IndexOutOfBoundsException(
        "Index: "+index+", Size: "+size);

    ensureCapacity(size+1);  // Increments modCount!!
    System.arraycopy(elementData, index, elementData, index + 1,
             size - index);
    elementData[index] = element;
    size++;
}
于 2012-11-26T17:47:42.417 に答える
1

簡単に使用してください

list.add("element1");
list.add("element2");
list.add("element3);

IndexOutOfBoundsExceptionが発生する理由は、まだ存在していない要素1にアクセスするためです。

docuofArrayListから

Throws:
IndexOutOfBoundsException - if the index is out of range (index < 0 || index > size())
于 2012-11-26T17:49:09.920 に答える
0

リストに重複が含まれておらず、順序を気にしない場合は、次を使用できます。Set<String>

于 2012-11-26T17:44:58.073 に答える
0

まず第一に、あなたは次のように使うべきArrayListですList

List<String> list = new ArrayList<String>();
list.add("...");

Setの代わりに使用する必要があると思いますList

于 2012-11-26T17:45:58.077 に答える