我知道这可能不是最好的事情而且我没有正确使用这个对象,但这是我的问题。我想使用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接口的事实
有没有办法实现我想做的事情?
感谢
答案 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