【发布时间】:2014-06-13 08:19:22
【问题描述】:
我知道这可能不是最好的做法,而且我没有正确使用这个对象,但这是我的问题。我想使用 ConcurrentSkipListMap 并声明了我的地图:
private ConcurrentSkipListMap<Date,T> map
有时,我需要使用“null”值初始化此地图的元素,这意味着在给定的一天,没有数据。对于正常工作的常规 hastable,您可以插入与键关联的空值。在获取某个日期的值时,我只需要测试它是否为空。对于 ConcurrentSkipListMap,这不起作用。它抛出一个空值异常。在查看源代码时,我了解到这是节点的内部表示,其中 null 值仅表示列表中的节点已死。
我知道最好的答案是,在这种情况下不要添加日期......但由于很多原因,我仍然需要。无论如何,对我来说,测试密钥的存在与测试与密钥关联的空值是一样的。我也无法添加虚拟值,因为我无法区分这个虚拟值和真实值(例如,如果我的模板类是整数,即使我选择 -1 作为标志如果为空,我将无法看到这一天实际值为 -1 的差异)。
我以前用过
private SortedMap<Date,T> map = Collections.synchronizedSortedMap(new TreeMap<Date,T>(new BasicDateComparatorIncreasing()));
但我喜欢 ConcurentSkipListMap 实现了 ConcurrentNavigableMap 接口这一事实
有没有办法实现我想做的事情?
谢谢
【问题讨论】:
-
你能写出某种
Maybe<T>包装器,它只包含一个可能为空的T吗?
标签: java hashmap hashtable java.util.concurrent