我读了一些关于 HashSets
的文档性能,但我仍然一无所获。
我有一个可变的 User
类,其中有一个唯一的、t 安全的最终字段:
public User {
// magical thread-safe, immutable int
private final int userID;
// some mutable stuff
public User(int userID){
this.userID = userID;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return Objects.equals(userID, user.userID);
}
@Override
public int hashCode() {
return Objects.hash(userID);
}
}
我有一个线程安全的不可变字段 - userID。
现在,我创建一个 HashSet<User> users
容器,这里开始我的问题。
我经常迭代这个集合,找到 User
通过他的昵称、ID 或其他一些变量,有时我会更改它们的值(可变值,而不是字符串),但 userID 始终保持不变。
在这种情况下迭代和修改可变对象是否会影响 HashSet
表现?如果我有hashcode()
其中只包含一个不可变的值 - 应该没问题,对吧?
非常感谢您的帮助!
编辑
将 AtomicInteger 更改为 int - 不需要原子性,它已经是 t 安全的
最佳答案
只要修改的字段不是 hashCode/equals 的一部分,这就不成问题。
关于java - HashSet<User>修改,而user只有最终值 'equals/hashcode',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40717804/