三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

Java 开发问题:ArrayList 容量误解导致越界

Java 开发问题:ArrayList 容量误解导致越界
List<Integer>list=newArrayList<>(3);list.set(0,100);
  • 在 Java 开发中,执行上述代码,出现如下错误信息
java.lang.IndexOutOfBoundsException: Index 0 out of bounds for length 0
问题原因
  1. 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;}
  1. 调用 size 方法仍为 0
List<Integer>list=newArrayList<>(3);System.out.println(list.size());
# 输出结果 0
处理策略
  • 初始化时填充 null 值
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
← 返回列表