我正在考虑这个问题的答案:如何在任何 Java 地图实现上测试空键?
我的第一个想法是检查Spliterator
地图的键集是否具有以下特征Spliterator.NONNULL
:
map.keySet().spliterator().hasCharacteristics(Spliterator.NONNULL)
JavaDoc说:
表示源保证遇到的元素不会为空的特征值。(例如,这适用于大多数并发集合、队列和映射。)
在回答之前我做了一些检查:
没有提供的 Spliterator
a不具有此特征,即使自然排序不允许空键。TreeMap
Compararator
new TreeMap<>().keySet().spliterator().hasCharacteristics(Spliterator.NONNULL); // false
更令人惊讶的是,键集Spliterator
的 s本身并没有这个特性。EnumMap
EnumSet
EnumSet.allOf(DayOfWeek.class).spliterator().hasCharacteristics(Spliterator.NONNULL); // false
我知道spliterator().hasCharacteristics(Spliterator.NONNULL)
在上述情况下的结果返回false
为默认实现Set.spliterator()
被评估。
但是,这些集合的拆分器不覆盖Set.spliterator()
创建Spliterator
with是否有原因Spliterator.NONNULL
?这会破坏我不知道的规范吗?