Java-Map允许空值/键,但不支持线程安全

Java-Map允许空值/键,但不支持线程安全,java,map,thread-safety,Java,Map,Thread Safety,我正在寻找具有以下要求的映射接口的实现: 线程不安全 不允许空值和空键 在JDK中 你知道吗 Java 6如何使用: Map hashMap=new hashMap(); hashMap.put(null,null);//允许 Map Map=Collections.checkedMap(hashMap,String.class,String.class); map.put(null,null);//导致NullPointerException 现在,我希望map能够满足您的所有3个要求。

我正在寻找具有以下要求的映射接口的实现:

  • 线程不安全
  • 不允许空值和空键
  • 在JDK中
你知道吗

Java 6

如何使用:

Map hashMap=new hashMap();
hashMap.put(null,null);//允许
Map Map=Collections.checkedMap(hashMap,String.class,String.class);
map.put(null,null);//导致NullPointerException

现在,我希望
map
能够满足您的所有3个要求。

您可以使用一个不允许
null
键或值的包装器。尽管这取决于您希望的彻底程度,但您需要确保它也不允许用户通过map视图设置
null
(即
map.entrySet()。下一步().setValue(null)
)@LuiggiMendoza怎么做?你能发布一个详细的答案吗?checkedMap与
map.entrySet().next()是防弹的吗?setValue(null)
如@yshavit所述?但是,我不知道checkedMap…@Alex看起来像它。只需检查javadoc。只是一个警告,这在Java 7中似乎已经改变了(或者可能是特定于实现的!)@Alex:您不接受这个答案,尽管它满足了您所有的3个要求,我可以知道为什么吗?我不接受它是因为您对Java 7提出了警告。请参阅要求中的我的更新。
Map<String,String> hashMap = new HashMap<String,String>();
hashMap.put(null, null); // allowed

Map<String,String> map = Collections.checkedMap(hashMap, String.class, String.class);
map.put(null, null); // results in NullPointerException