Как я могу использовать Java ConcurrentNavigableMap с компаратором вместо TreeMap? - PullRequest
0 голосов
/ 25 октября 2011

Мне нужна очередь сборки, которая всегда будет сортироваться по ключам. швы TreeMap отлично подходят для этого, как в этом примере: http://www.javaexamples4u.com/2009/03/treemap-comparator.html но большая проблема в том, что это не потокобезопасно, тогда я нашел ConcurrentNavigableMap
отлично, но как мне использовать компаратор так же, как с TreeMap? я не нашел никакого примера для этого.

Ответы [ 2 ]

1 голос
/ 25 октября 2011

Похоже, вы действительно ищете PriorityQueue . Если вам нужна поточно-ориентированная версия, вы можете использовать PriorityBlockingQueue .

Приоритетная очередь - это очередь, в которую можно получить элементы, упорядоченные по «важности». В случае Java вы можете использовать Comparator или естественный порядок элементов (если они реализуют Comparable).

Если вам действительно нужно использовать ConcurrentNavigableMap, вам необходимо использовать его реализацию, такую ​​как ConcurrentSkipListMap . Просто выделите экземпляр ConcurrentSkipListMap и передайте ему компаратор, который вы хотите использовать.

new ConcurrentSkipListMap<MyKeyType, MyValueType>(new MyKeyComparator());
1 голос
/ 25 октября 2011

ConcurrentNavigableMap - это просто интерфейс.Вам нужно использовать конкретный класс, реализующий его, который в стандартной библиотеке коллекций равен ConcurrentSkipListMap .

Вы должны иметь возможность использовать ConcurrentSkipListMap в качестве замены для TreeMap, включая использованиекомпаратор.Операции обычно имеют схожие характеристики производительности (O (log n)), но, как я понимаю, операция ConcurrentSkipListMap size () требует обхода списка пропусков, а не просто чтения переменной, поэтому просто будьте осторожны, если вы часто вызываете это прибольшая карта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...