为什么另一个for
-环形?为什么我们要开始第二个for
-在最后一个位置之后循环一个?为什么在那一秒内我们使用 for 循环list.set()
,我知道 set 方法接受两个参数,索引位置和要子到指定位置的元素。为什么j - 1
?
该方法执行文档中所述的所有操作。
内循环将元素左移一位。
for (int j = i + 1; j < list.size(); j++) {
list.set(j - 1, //The index before j (that is, j - 1) is set to...
list.get(j)); //the current element.
}
}
从找到的索引之后的元素开始,它将左侧的元素设置为当前元素。最终,所有元素都会向左移动。
list.set(list.size() - 1, 0);
这会将最后一个元素设置为零。由于您的列表已删除一个元素,因此您需要删除最后一个元素,因为所有内容都已转移。
Example:
在这些例子中,^
我是和*
is j
.
0 1 2 3 4
假设我要删除 2。
首先,我将循环直到找到 2。
0 1 2 3 4
^ index: 2
现在,我将左移所有内容以删除该元素。因为我们要向左移动,所以我们需要从i + 1
(因此for
-循环开始于i + 1
.
0 1 3 3 4
^ * (replaced the one before *)
接下来,我们再做一次。
0 1 3 4 4
^ *
现在我们完成了。
列表.set(列表.size() - 1, 0);
然而最后还剩下4。我们需要删除它,因为我们删除了一个元素,并且列表少了一个元素。因此,我们将最后一个元素设置为零以将其删除(当然,这假设零不是列表中的有效值)。
Note:
我强烈建议这样做list.remove(list.size() - 1)
而不是调用set
。这实际上删除了最后一项,并且不会为其保留“幻数”默认值。
Why the i--
?
你需要i--
因为所有内容都已左移,所以您需要将索引 1 更新到左侧,即减一。 (实际上,你需要做的是在相同的索引,但自从for
-循环执行i++
你需要做的每一次迭代i--
“取消”它。)