簡體   English   中英

如何將Java ConcurrentNavigableMap與比較器而不是TreeMap一起使用?

[英]How can I use a Java ConcurrentNavigableMap with comparator instead of a TreeMap?

我需要構建隊列,它將始終按其鍵排序。 TreeMap接口很適合它,就像在這個例子中: http//www.javaexamples4u.com/2009/03/treemap-comparator.html但是最大的問題是它不是線程安全的,然后我找到了ConcurrentNavigableMap
很好,但我如何使用比較與TreeMap相同的方式? 我沒有找到任何例子。

ConcurrentNavigableMap就是這個界面。 您需要使用實現它的具體類,它在標准集合庫中是ConcurrentSkipListMap

您基本上應該能夠使用ConcurrentSkipListMap作為TreeMap的替代品,包括使用比較器。 操作通常具有類似的性能特征(O(log n)),但據我所知,ConcurrentSkipListMap的size()操作需要遍歷跳過列表而不是簡單地讀取變量,所以如果你經常調用它,就要小心點一張大地圖。

聽起來你實際上在尋找PriorityQueue 如果您需要它的線程安全版本,則可以使用PriorityBlockingQueue

優先級隊列是一個隊列,您可以在其中檢索按“重要性”排序的項目。 對於Java,您可以使用Comparator或項目的自然順序(如果它們實現Comparable)。

如果確實需要使用ConcurrentNavigableMap,則需要使用它的實現,例如ConcurrentSkipListMap 只需分配一個ConcurrentSkipListMap實例並將其傳遞給您想要使用的比較器。

new ConcurrentSkipListMap<MyKeyType, MyValueType>(new MyKeyComparator());

暫無
暫無

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

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