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中
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