我知道Hashtable不允许空值,因为它是遗留的,由HashMap修复.由于排序是个问题,因此树中不允许为空.但是为什么我们在ArrayDeque中不允许null?
来自Javadoc Deque:
虽然
Deque严格要求实现禁止插入null元素,但强烈建议他们这样做.所有的用户Deque都强烈建议那些允许null元素实现不采取插入空的能力优势.这是因为null通过各种方法用作特殊返回值以指示双端队列是空的.
该ArrayDeque实现还用于null指示一个空元素(如sestus '和Aman jangra的答案中所述),因此推理是双重的:合同和实现细节.
值得注意的是,它ArrayDeque 可以很容易地支持null元素而没有太多额外的复杂性,因此更令人信服的理由似乎是Deque接口的建议.
解决方法: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)