Java中能否不创建新数组实现数组元素替换、移除及增删操作?
问题解答
首先给出题目中的初始数组声明代码:
static String[] Student = new String[6]; //My array
针对这个长度固定为6的静态字符串数组,在满足操作边界的前提下,完全可以不创建任何新数组完成全部增删操作。
核心原理
Java中数组是定长数据结构,一旦初始化完成,长度就永久固定,无法扩容或缩容,但只要操作不超出数组的固定长度范围,所有增删动作都可以在原数组的内存空间内原地完成:
- 初始状态下,这个长度为6的数组所有位置默认值都是
null,相当于自带6个空位。第一步添加元素时,只要你要添加的第一组元素总数不超过6,直接按索引给对应位置赋值即可,比如Student[0] = "Tom"; Student[1] = "Lily",全程不需要新数组。 - 移除指定元素时不需要创建新数组:先遍历找到目标元素所在的索引位置,把该索引后面的所有有效元素依次向前移动一位,覆盖被删除元素的位置,最后把移动后空出的末尾位置重新设为
null即可,整个移位操作都在原数组上完成。 - 移除操作完成后,数组里会空出至少1个值为
null的槽位(前提是你确实移除了1个有效元素,没有做无效删除),直接把要新增的元素赋值到这个空槽位,就完成了最后一步添加操作。
无法完成的边界情况
如果出现以下两种情况,不创建新数组就无法完成操作:
- 第一步要添加的第一组元素总数超过6:数组固定只有6个位置,不建新数组根本存不下超出容量的元素。
- 移除操作没有实际腾出空位:比如要删除的元素根本不在数组里,移除后数组6个位置还是满的,自然没有空间存最后要加的新元素。
内容的提问来源于stack exchange,提问作者Rayaan R
相关产品推荐
相关产品推荐

