HashSet实现中的Null对象

在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()return 的调用将返回null,这与尝试删除不存在的对象的结果没有区别,并且HashSet.remove()无法履行的约定。

以上是 HashSet实现中的Null对象 的全部内容, 来源链接: utcz.com/qa/422409.html

回到顶部