import java.util.*;
class TestArray {
 public static void main(String[] args) {
char a = '1', b = '2', c = '3', d = '4';
ArrayList a1 = new ArrayList(1000);
a1.add(0,new Character(a)) ;
a1.ensureCapacity(2);
a1.add(2, new Character(b));
System.out.println(a1.size());
}
}
出现错误:
java.lang.IndexOutOfBoundsException: Index: 2, Size: 1

解决方案 »

  1.   

    你加入链表中的顺序,应该是0 1 2 ...
    a1.add(2, new Character(b));
    这一句应该改为
    a1.add(1, new Character(b));
      

  2.   

    那样是对的!可是ArrayList是一个可变数组,
    我就想把放在第三个位置!有什么办法不?
    用“a1.ensureCapacity(2);”增加容量,
    为什么不可以?
      

  3.   

    package cn.edu.fjnu;import java.util.*;
    class TestArray {
     public static void main(String[] args) {
    char a = '1', b = '2', c = '3', d = '4';
    ArrayList a1 = new ArrayList(1);
    System.out.println(a1.size()+a1.toString());
    a1.add(0,new Character(a)) ;
    System.out.println(a1.size()+a1.toString());
    a1.ensureCapacity(2);
    System.out.println(a1.size()+a1.toString());
    a1.add(1,null);
    System.out.println(a1.size()+a1.toString());
    a1.add(2, new Character(b));
    System.out.println(a1.size()+a1.toString());
    }
    }Result:
    0[]
    1[1]
    1[1]
    2[1, null]
    3[1, null, 2]public void add(int index,
                    E element)将指定的元素插入此列表中的指定位置。向右移动当前位于该位置的元素(如果有)以及所有后续元素(将其索引加 1)。 指定者:
    接口 List<E> 中的 add
    覆盖:
    类 AbstractList<E> 中的 add
    参数:
    index - 指定元素所插入位置的索引。
    element - 要插入的元素。 
    抛出: 
    IndexOutOfBoundsException - 如果索引超出范围 (index < 0 || index > size())。
    a1.ensureCapacity(2);//这句执行以后a1.size()还是1。
    a1.add(2, new Character(b));//2已经超出范围了
      

  4.   

    我觉得可能是ArrayList必须顺序添加,不能跨越着添加,你如果加上a1.add(1,null);就没有问题了
      

  5.   

    参考java api:
    1. arraylist中的add(int index, E )方法,(index < 0 || index > size())时抛出IndexOutOfBoundsException;
    2.  size()方法返回的是当前列表中的元素个数,而不是
      

  6.   

    (接上)
       申请的长度;
    综上,在向列表中添加第二个数时,size方法返回的是1<index(=2),所以抛出异常。
      

  7.   

    你可以打印出ArrayList里面的东西
    来看看