在ConcurrentSkipListMap Java中插入空值

时间:2014-06-13 08:19:23

标签: java hashmap hashtable java.util.concurrent

我知道这可能不是最好的事情而且我没有正确使用这个对象,但这是我的问题。我想使用ConcurrentSkipListMap并声明我的地图:

private ConcurrentSkipListMap<Date,T> map 

有时,我需要使用&#34; null&#34;来初始化此地图的元素。价值,意味着在某一天,没有数据。对于常规hastable,可以使用,可以插入与键关联的空值。获取某个日期的值时,我只需要测试它是否为null。对于ConcurrentSkipListMap,这不起作用。它抛出一个空值异常。在查看源代码时,我理解这是节点的内部表示,其中空值仅表示列表中的节点已死。

我知道最好的答案就是,在这种情况下只是不添加日期......但由于种种原因,我仍然需要。无论如何,测试密钥的存在对我来说就像测试与密钥相关的空值一样。我也无法添加虚拟值,因为我无法区分这个虚拟值和真实值(例如,如果我的模板类是一个整数,即使我选择-1为一个空的标志,我将无法看到这一天的实际值为-1的差异。)

我以前用过

private SortedMap<Date,T> map = Collections.synchronizedSortedMap(new TreeMap<Date,T>(new BasicDateComparatorIncreasing()));

但我喜欢ConcurentSkipListMap实现ConcurrentNavigableMap接口的事实

有没有办法实现我想做的事情?

感谢

1 个答案:

答案 0 :(得分:2)

怎么样

private ConcurrentSkipListMap<Optional<Date>, T> map;

然后添加元素:

map.put(Optional.fromNullable(date), value);

访问密钥检查Optional.isPresent()并致电Optional.get()

http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/base/Optional.html