Java 如果元素存在,Set.remove是否会返回false?

Java 如果元素存在,Set.remove是否会返回false?,java,Java,考虑以下示例: public Optional<User> getUser(Integer id) { for(User user : usersSet) { if(user.getId().equals(id)) return Optional.of(user); } return Optional.empty(); } public void deleteUser(Integer id) { User user = getUser

考虑以下示例:

public Optional<User> getUser(Integer id) {
    for(User user : usersSet) {
        if(user.getId().equals(id)) return Optional.of(user);
    }
    return Optional.empty();
}

public void deleteUser(Integer id) {
    User user = getUser(id).orElseThrow(new RuntimeException("User not found"));
    boolean result = usersSet.remove(user);
}
public可选getUser(整数id){
for(用户:usersSet){
if(user.getId().equals(id))返回可选的.of(user);
}
返回可选的.empty();
}
public void deleteUser(整数id){
User User=getUser(id).orelsetrow(新运行时异常(“未找到用户”);
布尔结果=usersSet.remove(用户);
}
是否存在结果为假的情况


我这样问是因为我不知道是否有必要检查HashSet的
remove
方法的结果。

否。如果元素存在,则无法得到false

如果你看一下,它被清楚地提到了

如果此集合包含指定的元素,则为true


不,如果元素存在,就不可能得到false

如果你看一下,它被清楚地提到了

如果此集合包含指定的元素,则为true


usersSet
可能是一个
java.util.Set
实例。
Set
依赖于添加/删除操作的
equals()
方法


所以
boolean result=usersSet.remove(用户)getUser()
方法相同的条件覆盖
User
类的
equals()
时,code>才会返回
true

例如,为了简化:
返回User.getId().equals(id)
usersSet
可能是一个
java.util.Set
实例。
Set
依赖于添加/删除操作的
equals()
方法

所以
boolean result=usersSet.remove(用户)getUser()
方法相同的条件覆盖
User
类的
equals()
时,code>才会返回
true

例如,为了简化:
返回User.getId().equals(id)

在您的案例中,结果可能为假,因为您的
用户
对象和用户集都是不同的。此外,这取决于您为
User
class

实现
equal()
方法的方式


在您的案例中,结果可能为假,因为您的
用户
对象和用户集都是不同的。此外,这取决于您为
User
class

实现
equal()
方法的方式,尽管如此,如果您得到
false
,即使元素似乎存在,可能的罪魁祸首是错误同步的多线程应用程序代码。但我在想,当另一个线程删除此对象时,结果可能是错误的。这有意义吗?@DamianU你从来没有提到过你的多线程环境。呵呵?是的,这是可能的,如果你用不同的线程轰炸这段代码。@DamianU如果你的代码被正确同步,即使在多线程环境中也不会发生这种情况。如果您在代码中留下了数据争用,则所有赌注都将被取消。@biziclop好的,我是否应该永远不要检查remove方法的结果,例如,如果结果为false,则抛出异常?我应该同步我的代码,对吗?尽管如此,如果你得到了
false
,即使元素似乎存在,可能的罪魁祸首是错误同步的多线程应用程序代码。但我在想,可能当另一个线程删除此对象时,结果将是false。这有意义吗?@DamianU你从来没有提到过你的多线程环境。呵呵?是的,这是可能的,如果你用不同的线程轰炸这段代码。@DamianU如果你的代码被正确同步,即使在多线程环境中也不会发生这种情况。如果您在代码中留下了数据争用,则所有赌注都将被取消。@biziclop好的,我是否应该永远不要检查remove方法的结果,例如,如果结果为false,则抛出异常?我只需要同步我的代码,对吗?顺便说一句,如果您使用的是
可选的
,那么您可以执行
users.stream().filter(u->u.getId().equals(id)).findFirst()谢谢你的建议:)。顺便说一句,如果你使用的是
可选的
,你可以使用
users.stream().filter(u->u.getId().equals(id)).findFirst()谢谢你的建议:)。