为啥我们不能在java中的linkedHashMap中放置空键[关闭]
Posted
技术标签:
【中文标题】为啥我们不能在java中的linkedHashMap中放置空键[关闭]【英文标题】:Why we can't put null key in linkedHashMap in java [closed]为什么我们不能在java中的linkedHashMap中放置空键[关闭] 【发布时间】:2017-09-22 05:00:15 【问题描述】:我们可以在 hashMap 中放置一个空键。但是在linkedHashMap中我们不能拉空键。这背后的原因是什么。
【问题讨论】:
你在哪里读到“在linkedHashMap中我们不能拉空键”? “单个”空键是什么意思? 所有映射都允许使用 Null 键,而不仅仅是 HashMap。 您可以为所有地图分配 null 作为键。按照@assylias 回答。 @iavanish 这不是真的,TreeMap
在某些情况下会很乐意拒绝 null
键。
@biziclop 是的,你是对的(在某些情况下 TreeMap 会产生空指针异常)。如果您的键的 Comparator 不允许空值或者它基于自然顺序,那么它将不允许空键。但是,如果您创建允许空值的自定义比较器,则地图也将允许空键。从 Java Doc 中,“如果指定的键为 null 并且此映射使用自然排序,或者其比较器不允许空键,则抛出 NullPointerException”。
【参考方案1】:
您可以在LinkedHashMap
中放置一个空键。示例:
Map<String, String> m = new LinkedHashMap<> ();
m.put(null, "a");
System.out.println(m.size());
System.out.println(m.get(null));
打印1
和a
。
【讨论】:
【参考方案2】:关注documentation
该类提供所有可选的 Map 操作,并允许 空元素。
【讨论】:
以上是关于为啥我们不能在java中的linkedHashMap中放置空键[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
为啥我们不能在(非静态)内部类(Java 16 之前)中使用静态方法?
在 Java 7 ConcurrentHashMap 中,为啥在写的时候需要段锁?为啥我们不能再次使用 Unsafe 来保持非阻塞?