gpt4 book ai didi

java - 在 ConcurrentSkipListMap Java 中插入空值

转载 作者:行者123 更新时间:2023-12-02 05:44:43 24 4
gpt4 key购买 nike

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

private ConcurrentSkipListMap<Date,T> map 

有时,我需要使用“null”值初始化此 map 的元素,这意味着在给定的一天没有数据。对于有效的常规哈希表,您可以插入与键关联的空值。当获取特定日期的值时,我只需测试它是否为空。对于 ConcurrentSkipListMap 来说,这是行不通的。它抛出空值异常。在查看源代码时,我了解到这是节点的内部表示,其中 null 值仅意味着列表中的节点已死亡。

我知道对此的最佳答案是,在这种情况下不要添加日期......但出于多种原因,我仍然需要这样做。无论如何,对我来说,测试键是否存在与测试与键关联的空值相同。我也无法添加虚拟值,因为我无法区分该虚拟值和真实值(例如,如果我的模板类是整数,即使我选择 -1 作为标志对于空,我将无法看到当天实际值为 -1 的差异)。

我之前使用过

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

但我喜欢 ConcurentSkipListMap 实现 ConcurrentNavigableMap 接口(interface)这一事实

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

谢谢

最佳答案

怎么样

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

然后添加元素:

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

访问 key 时检查 Optional.isPresent() 并调用 Optional.get()

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

关于java - 在 ConcurrentSkipListMap Java 中插入空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24200750/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com