List<Integer>list=newArrayList<>(3);list.set(0,100);
- 在 Java 开发中,执行上述代码,出现如下错误信息
java.lang.IndexOutOfBoundsException: Index 0 out of bounds for length 0
问题原因
- initialCapacity 是底层数组的大小,size 是列表中实际存储的元素个数
publicArrayList(intinitialCapacity){if(initialCapacity>0){this.elementData=newObject[initialCapacity];}elseif(initialCapacity==0){this.elementData=EMPTY_ELEMENTDATA;}else{thrownewIllegalArgumentException("Illegal Capacity: "+initialCapacity);}}
publicEset(intindex,Eelement){if(index>=size)thrownewIndexOutOfBoundsException(outOfBoundsMsg(index));EoldValue=(E)elementData[index];elementData[index]=element;returnoldValue;}
- 调用 size 方法仍为 0
List<Integer>list=newArrayList<>(3);System.out.println(list.size());
# 输出结果 0
处理策略
intinitialCapacity=3;List<Integer>list=newArrayList<>(initialCapacity);for(inti=0;i<initialCapacity;i++){list.add(null);}System.out.println(list.size());list.set(0,100);System.out.println(list.get(0));
# 输出结果 3 100