事情缘由
在项目中遇到需要把ArrayList的第一个位置
覆盖成新的值 而恰巧第一个位置没有任何值,然后就抛越位异常了
ArrayList<Object> objects = new ArrayList<>();
objects.set(0,1);
问题分析
ArrayList#set
public E set(int index, E element) {
rangeCheck(index);
E oldValue = elementData(index);
elementData[index] = element;
return oldValue;
}
ArrayList#rangeCheck(index)
private void rangeCheck(int index) {
if (index >= size)
throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}
这里的判断条件是 index>=size,当ArrayList是一个空List的时候,size==0,此时set(0,xxx) 触发抛异常。
跟add(int ,E)对比
ArrayList#add(int ,E);
public void add(int index, E element) {
rangeCheckForAdd(index);
ensureCa