如果元素存在,Set.remove可能会返回false吗?

时间:2017-04-11 10:17:12

标签: 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(id).orElseThrow(new RuntimeException("User not found"));
    boolean result = usersSet.remove(user);
}

是否存在结果为假的情况?

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

3 个答案:

答案 0 :(得分:3)

没有。如果元素存在,则无法获得错误。

如果你看一下docs,就会明确提到它。

  

如果此set包含指定的元素

,则为true

答案 1 :(得分:2)

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

因此boolean result = usersSet.remove(user);只有在使用true方法的相同条件时才会覆盖equals()类的User,才会返回getUser()。例如简化:return user.getId().equals(id);

答案 2 :(得分:0)

YES。

在您的情况下,结果可能为false ,因为您的users对象和userSet都不同。此外,这取决于您为equal()

实施User方法的方式