gpt4 book ai didi

java - 如何改变HashSet中的值?

转载 作者:行者123 更新时间:2023-12-02 03:39:11 25 4
gpt4 key购买 nike

这有点像 this question, 的重复不过,我正在寻找答案中对“可变键”和“存储桶”的更多 ELI5 解释。

这是我无法理解的代码:

HashSet<Object> set = new HashSet<Object>();
set.add(1); set.add(2); set.add(3);

for(Object i : set)
if(i.equals(1)) {
i = 1337;
System.out.println("FOUND");
}

for(Object i : set) System.out.println(i);

输出:

FOUND

1

2

3

为什么不打印出 1337, 2, 3?

同样的问题也适用于删除对象。

编辑:

这符合我的要求,但我相当确定这不是正确的方法:

for(Object i : set)
if(i.equals(1)) {
set.remove(i);
set.add(1337);
break;
}

最佳答案

您正在此处处理原语。在 for 循环中所做的是将值从 Set 复制到 i,然后用它做一些事情。现在,i 是一个全新的变量,您更改了它的值,而不是在 Set 中。因此,Set 没有改变。因此,您必须将其从 Set 中删除,然后放入新值,这样就可以了:

for(Object i : set)
if(i.equals(1)) {
set.remove(i);
set.add(1337);
break;
}

如果你有对象,也会发生同样的事情,你将有新的指针,不是同一个对象,而是指向同一位置的两个指针,因此你将删除一个指针,但删除 Set 中的一个指针会保留下来,所以GC不会删除该对象,直到Set中的指针被删除(因此,没有指针指向该对象)。

关于java - 如何改变HashSet中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37042202/

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