gpt4 book ai didi

java - 更改字段后从 Set 中删除对象

转载 作者:行者123 更新时间:2023-11-29 07:42:50 24 4
gpt4 key购买 nike

我在准备 SCJP 时发现了这个问题:

class Key {
public int i;

public Key(int i) {
this.i = i;
}

public boolean equals(Object o) {
return i == ((Key) o).i;
}

public int hashCode() {
return i;
}
}

public class Test {
public static void main(String[] args) {
Set<Key> set = new HashSet<Key>();
Key k1 = new Key(1);
Key k2 = new Key(2);
set.add(k1);
set.add(k1);
set.add(k2);
set.add(k2);
System.out.print(set.size() + “:”);
k2.i = 1;
System.out.print(set.size() + “:”);
set.remove(k1);
System.out.print(set.size() + “:”);
set.remove(k2);
System.out.print(set.size());
}
}

结果是:2:2:1:1

问题是:为什么改变了k2的字段后不能去掉?

最佳答案

HashSet 中的对象根据其 hashCode() 定位。如果更改导致 hashCode() 更改的字段,Java 将无法在集合中找到它,因此无法将其删除。

关于java - 更改字段后从 Set 中删除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28529206/

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