簡體   English   中英

在ConcurrentSkipListMap Java中插入空值

[英]Insertion of null value in a ConcurrentSkipListMap Java

我知道這可能不是最好的事情,並且我沒有正確使用此對象,但這是我的問題。 我想使用ConcurrentSkipListMap,並這樣聲明我的地圖:

private ConcurrentSkipListMap<Date,T> map 

有時,我需要使用“ null”值初始化此地圖的元素,這意味着在給定的日期沒有數據。 對於有效的常規hastable,可以插入與鍵關聯的空值。 當獲取某個日期的值時,我只需要測試它是否為null。 對於ConcurrentSkipListMap,這不起作用。 它引發一個空值異常。 在查看源代碼時,我了解到這是Node的內部表示,其中null值僅表示列表中的Node已失效。

我知道最好的答案是,在這種情況下,不要添加日期...但是由於許多原因,我仍然需要這樣做。 無論如何,對我而言,測試鍵的存在與測試與鍵關聯的空值相同。 我也無法添加虛擬值,因為我將無法在該虛擬值和真實值之間進行區分(例如,如果我的模板類是Integer,即使我選擇-1作為標志)如果為空,則我將無法看到當天的實際值為-1的差異)​​。

我以前在用

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

但我喜歡ConcurentSkipListMap實現ConcurrentNavigableMap接口的事實

有沒有一種方法可以實現我想做的事情?

謝謝

怎么樣

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM