为什么ArrayDeque中不允许使用空值?

Mut*_*thu 9 java

我知道Hashtable不允许空值,因为它是遗留的,由HashMap修复.由于排序是个问题,因此树中不允许为空.但是为什么我们在ArrayDeque中不允许null?

小智 9

这可能是因为 null 被各种方法用作特殊的返回值,以指示 deque 为空。但并非所有 deque 都禁止插入 null 值。


Kay*_*man 9

来自Javadoc Deque:

虽然Deque严格要求实现禁止插入null元素,但强烈建议他们这样做.所有的用户Deque都强烈建议那些允许null元素实现采取插入空的能力优势.这是因为null通过各种方法用作特殊返回值以指示双端队列是空的.

ArrayDeque实现还用于null指示一个空元素(如sestus '和Aman jangra的答案中所述),因此推理是双重的:合同实现细节.

值得注意的是,它ArrayDeque 可以很容易地支持null元素而没有太多额外的复杂性,因此更令人信服的理由似乎是Deque接口的建议.


Chr*_*Xue 8

解决方法:ArrayDeque<Optional<T>>java.util.Optional

// Add non-null value
queue.add(Optional.of(value))

// Add nullable value
queue.add(Optional.ofNullable(value))

// Add null
queue.add(Optional.empty())

// Unbox
last = queue.pollLast().orElse(null)
Run Code Online (Sandbox Code Playgroud)