为什么Java数组不使用Arrays.copyOf无法正常扩容?
问题原因
- 你手动创建两倍容量的新数组后,没有将类成员变量
this.theData指向这个新数组,操作结束后this.theData仍然指向原来的小容量旧数组,所以扩容操作完全没有生效。 - 你没有同步更新
this.capacity的数值为原来的两倍,后续判断数组剩余容量、计算插入位置的逻辑依然会基于旧的容量值运行,进而出现元素覆盖的异常。
你遇到的「第一个索引内容被新值替换」的问题,本质就是扩容未生效,旧数组已经处于满容状态,后续插入新元素时触发了错误的覆盖逻辑。
修正方案
补全给theData赋值新数组、更新容量的两步即可,完整代码如下:
double arrayResize[] = new double[this.capacity * 2]; for (int i = 0; i < this.theData.length; i++){ arrayResize[i] = this.theData[i]; } // 将原数组引用指向扩容后的新数组 this.theData = arrayResize; // 更新容量为原来的两倍 this.capacity = this.capacity * 2;
内容的提问来源于stack exchange,提问作者Paige
相关产品推荐
相关产品推荐

