ArrayList内部工作

时间:2015-04-22 06:44:42

标签: java collections

我想测试一下arrayList的索引工作方式。当我尝试在指定的索引处添加元素时,请说arrlist.add(15," shreyas");我得到一个Exception" IndexOutOfBoundException" ..为什么会这样?我很迷惑。请帮忙..!!!提前致谢

ArrayList <String> arrlist = new ArrayList <String>(20);
          arrlist.add(15, "shreyas");
          arrlist.add(18, "jp");

          for(int i=0;i<arrlist.size();i++){
                 System.out.println("Index is i="+i+" And Element is "+arrlist.get(i));
   }

5 个答案:

答案 0 :(得分:7)

ArrayList不能有空隙。如果您尚未首先将元素添加到0到14个位置,则无法将元素添加到第15个位置。

答案 1 :(得分:0)

以下是我的JDK 8源代码

的代码
/**
     * A version of rangeCheck used by add and addAll.
     */
    private void rangeCheckForAdd(int index) {
        if (index > size || index < 0)
            throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
    }

它清楚地表明,如果您的索引大于ArrayList假定的下一个位置,或者索引小于0,它将抛出IndexOutOfBoundsException

此方法的目的是在&#34;之间添加一个元素&#34;一个清单。

答案 2 :(得分:0)

您可以在ArrayList之间插入元素,但不能在两者之间留下空格。

来自ArrayList.class

if (index > size || index < 0)
        throw new IndexOutOfBoundsException(
        "Index: "+index+", Size: "+size);

答案 3 :(得分:0)

正如Akash已经解释过的那样,你不能在比当前数组索引更大的位置添加元素。 并且add(index,object)方法的基本用法是,如果传递索引&lt; arraylist长度然后在该位置添加新元素,所有后续元素右移一个位置。

希望这能澄清您的疑问

答案 4 :(得分:0)

首先 ArrayList 维护内部Object array Object[]

因此,在其数组内部,您可以预期任何类似于数组的行为,并且您无法添加任何元素添加大于其大小的位置。

然而,在文档

中更好地描述了此public void add(int index,E element)的目的

Inserts the specified element at the specified position in this list. Shifts the element currently at that position (if any) and any subsequent elements to the right (adds one to their indices).

ArrayList