从数组中移除元素时代码中for循环的作用是什么
问题解答
先把你提供的代码整理出来方便对照:
public Item3 removeItem(Item3 anItem){ Item3 temp = anItem; int element = locateByCat(anItem.getCat()); for(int i = element; i < inventory.length - 1; i++){ inventory[i] = inventory[i+1]; } itemCount--; inventory[inventory.length-1] = new Item3(); return temp; }
1. for循环的作用
这里的inventory是存储Item3实例的数组,locateByCat方法会返回你要删除的物品在数组中的下标,存在element变量里。
这个for循环的核心作用是:删除指定元素后,把后续所有元素整体往前挪一位覆盖空位,保证数组内的有效元素始终连续排列。比如你要删下标为2的元素,循环会依次把下标3的内容赋值到下标2、下标4的内容赋值到下标3,一直执行到数组倒数第二个位置为止,原本要删除的元素直接就被后续内容覆盖了。
2. 不用for循环也能移除元素的想法是否有误?
要分场景判断:
- 如果你能接受数组中间保留空值,那确实不需要for循环,直接把
inventory[element]赋值为空或者新的Item3对象,也能实现「移除指定位置元素」的效果。 - 但在这段代码的现有逻辑下,for循环是必不可少的:
这段代码的设计逻辑是所有有效元素必须连续排列在数组的前
itemCount个位置,如果去掉for循环不做挪位操作,删除元素后数组中间会出现无效空洞,后续遍历数组、按索引查找元素时都会读到空值,itemCount的计数也和实际有效元素的分布不匹配。
举个实际例子:假设inventory数组原始内容为[物品A, 物品B, 物品C, 物品D],要删除下标为1的物品B。没有for循环的话,处理后数组会变成[物品A, 空, 物品C, 物品D];有for循环的话,处理完的数组为[物品A, 物品C, 物品D, 空Item3实例],前3个位置都是连续的有效元素,和itemCount减1后的计数完全匹配。
内容的提问来源于stack exchange,提问作者user14382661
相关产品推荐
相关产品推荐

