gpt4 book ai didi

java - 谁能给我解释一下 Joshua Bloch 第 41 项中的例子吗?

转载 作者:行者123 更新时间:2023-12-02 00:59:58 25 4
gpt4 key购买 nike

我现在正在阅读 Joshua Bloch 的《Effective Java》,当我阅读第 41 条“明智地使用重载”时,我对那里使用的示例感到困惑。我在电脑上试了一下,确实和书上的一样。但我不明白为什么!

这是这个例子:

public class SetList {
public static void main(String[] args) {
Set<Integer> set = new TreeSet<Integer>();
List<Integer> list = new ArrayList<Integer>();
for (int i = -3; i < 3; i++) {
set.add(i);
list.add(i);
}
for (int i = 0; i < 3; i++) {
set.remove(i);
list.remove(i);
}
System.out.println(set + " " + list);
}
}

它输出:

[-3, -2, -1] [-2, 0, 2]

我知道此示例中的 list.remove() 应该按索引删除,但事实并非如此!列表填充值后,它是:[-3, -2, -1, 0, 1, 2]。因此,当我们删除 0、1 和 2 个元素时,我们应该保留 [0, 1, 2] 而不是 [-2, 0, 2]。那里发生了什么事?

最佳答案

列表项将被逐一删除,并且当从列表中删除项时,其后的所有内容的索引都会向后移动。这就是索引最终引用与初始位置不同的项目的原因。

如果您无法轻松看到这一点,请在调试器中逐步执行代码,甚至在纸上手动“运行”列表操作,一步一步。

关于java - 谁能给我解释一下 Joshua Bloch 第 41 项中的例子吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23096807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com