采用System.arraycopy的方法实现动态数组,在删除元素时,出现数组越界

来源:1-10 均摊复杂度和防止复杂度的震荡

JoshuaLai

2020-08-09 01:03:03

异常:我通过System.arraycopy的方法去实现动态数组,在删除数据的时候,会出现数组越界的情况,但在使用老师的代码,则不会。

通过debug分析,问题似乎出在这里

http://img.mukewang.com/climg/5f2ed7a509dccedb14200787.jpg

尝试解决:在学习完复杂度震荡后,我在想是不是arrycopy的方法,导致remove的方法变成了Eager的情况。所以我将remove的resize改成四分之一,然后问题得到了解决。

问题:虽然问题得到了解决,但我感觉这并不是复杂度震荡的原因,因为在debug中,arrycopy方法的第五个参数,明显是有问题的。但我又想不出是什么导致的(arrycopy方法是idea自动生成的),请问bobo老师我的问题出在了哪?

写回答

1回答

liuyubobobo

2020-08-09

将 arr[index + 1, size) 这些元素往前移动,包含的元素个数是 size - (index + 1) =  size - index - 1。


应该是这个问题。


继续加油!:)

0

算法与数据结构

波波老师5年集大成之作,算法与数据结构系统学习,考试、面试、竞赛通用

2627 学习 · 1090 问题

查看课程