事情缘由
在项目中遇到需要把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
本文记录了在使用ArrayList的set方法时遇到的问题。当尝试对空ArrayList执行set(0, xxx)操作时,由于内部的rangeCheck(index)方法判断条件为index >= size,导致抛出异常。对比add(int, E)方法的rangeCheckForAdd,其判断条件为index > size,说明在插入元素时,允许在末尾添加。"
128044994,9198199,Hive常用函数详解:从内置到开窗,"['大数据开发', 'Hadoop', 'Hive']
最低0.47元/天 解锁文章
643

被折叠的 条评论
为什么被折叠?



