gpt4 book ai didi

java - HashSet 实现中的空对象

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:51:33 25 4
gpt4 key购买 nike

在Java API中,HashSet的实现是使用一个Object作为内部HashMap的值,

   // Dummy value to associate with an Object in the backing Map
private static final Object PRESENT = new Object();

public boolean add(E e) {
return map.put(e, PRESENT)==null;
}

但是HashMap允许它的值为null。我认为这不是填充值所必需的,那么为什么需要它呢?

最佳答案

因为 HashSet 契约指定如果指定的对象存在并被删除,则 remove() 返回 true。为此,它使用返回已删除值的包装 HashMap#remove()

如果您要存储 null 而不是对象,那么对 HashMap#remove() 的调用将返回 null,这将与尝试删除不存在的对象的结果无法区分,并且无法履行 HashSet.remove() 的约定。

关于java - HashSet 实现中的空对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12829163/

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