java arraylist indexOutOfBonds异常原因

时间:2015-11-12 08:47:56

标签: java arraylist

我正在尝试在arraylist中的各个位置添加各种项目。 我需要使用arraylist,因为要读取的元素数量不清楚。

当我添加元素时,我得到indexoutofbonds异常。 我明白如果索引大于size()我可能会得到异常。 但是因为我想当我尝试添加比arraylist大小更多的元素时,大小会增加,为什么我会被例外?数组和arraylist之间的区别在于arraylist是动态的还是处理大小问题?我错了吗?

一个例子如下。我正在使用arraylists的arraylist。

arr.add(e1,new ArrayList<Integer>());
在那种情况下,e1可以是1,0,10001,4,540,100000

不是arraylist应该处理这个问题吗?

我的意思是 我不想在下面使用这种方法。我需要元素之间的空格,以便在程序读取数据时其他元素可以适合它们的位置。我不希望它们被移动,因为为上面的代码指定的add方法占据了一个位置和元素。我不想将该项目添加到下一个可用位置。

arr.add(new ArrayList<Integer>());

任何帮助都会有用。或者你可以让我在Java中使用另一个有助于我解决问题的数据结构。

3 个答案:

答案 0 :(得分:2)

如果指定要插入的索引,它将动态为您处理。但是,如果要插入特定位置,则必须确保:

index >= 0 && index < size()

请参阅documentation

  

在此列表中的指定位置处插入指定的元素。将当前位置的元素(如果有)和右侧的任何后续元素移位(将其添加到索引中)。

     

...

     

<强>抛出

     

IndexOutOfBoundsException - 如果索引超出范围(索引&lt; 0 || index&gt; size())

答案 1 :(得分:1)

根据document

  

public void add(int index,          E元素)

     

抛出:       IndexOutOfBoundsException - 如果索引超出范围(索引&lt; 0 || index&gt; size())

您必须确保索引不在范围之外。

换句话说,如果您指定的索引> size()ArrayList不知道如何操纵size()与索引之间的元素。它应该构造这些元素并为您添加它们,也许是默认构造函数?我认为这应该是你的责任。如:

if (e1 > arr.size()) {
    arr.addAll(Collections.nCopies(e1 - arr.size(), Integer.valueOf(0)));
}
arr.add(e1, new ArrayList<Integer>());

答案 2 :(得分:0)

好的。我想通了。 ArrayList总是移位。你不能在元素之间留空间。这就是我一直在寻找的。

迟到的答案总比没有好;)