Домой Учебники по Java и J2EE Учебник по Java ConcurrentNavigableMap и ConcurrentSkipListMap со всеми подробностями (java.util.concurrent. *)

Учебник по Java ConcurrentNavigableMap и ConcurrentSkipListMap со всеми подробностями (java.util.concurrent. *)

1087
0

Некоторое время назад я написал статью о разнице между HashMap, ConcurentHashMap и SynchronizedMap. В этом уроке мы рассмотрим ConcurrentNavigableMap а также ConcurrentSkipListMap со всеми подробными объяснениями.

Есть ли у вас какие-либо вопросы ниже?

  • Сравнение ConcurrentHashMap v / s ConcurrentSkipListMap
  • Учебник по Java ConcurrentSkipListMap
  • TreeMap против ConcurrentSkipListMap
  • ConcurrentHashMap или LinkedHashMap

Почему SkipListMap в Java?

Согласно вики-странице, SkipList — это структура данных, которая сортируется и позволяет осуществлять быстрый поиск одновременно. Все элементы отсортированы на основе их естественного порядка сортировки ключей. В нашем уроке мы создадим объект crunchifyCompanyMap с подписью ниже.

1
ConcurrentNavigableMap < Integer , Строка > crunchifyCompanyMap знак равно новый ConcurrentSkipListMap < Integer , Строка > ( ) ;

Далее мы добавим 5 различных элементов в crunchifyCompanyMap. Ключом будут случайные целые числа, а значением будет Название компании .

В нашем уроке мы рассмотрим количество различных операций, выполняемых над ConcurrentSkipListMap.

CrunchifySkipListMap.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
пакет crunchify. ком . учебник ;
импорт Java . Util. Итератор ;
импорт Java . Util. NavigableSet ;
импорт Java . Util. одновременно. ConcurrentNavigableMap ;
импорт Java . Util. одновременно. ConcurrentSkipListMap ;
/ **
* @author Crunchify.com
* Простое руководство по Java ConcurrentNavigableMap и ConcurrentSkipListMap
* /
общественности учебный класс CrunchifySkipListMap {
общественности статический недействительным main ( Строка [ ] аргументы ) {
// ConcurrentNavigableMap: ConcurrentMap, поддерживающий операции NavigableMap, и рекурсивно для его навигации
// субкарты.
// ConcurrentSkipListMap: Создает новую пустую карту, отсортированную в соответствии с естественным порядком ключей.
ConcurrentNavigableMap < Integer , Строка > crunchifyCompanyMap знак равно новый ConcurrentSkipListMap < Integer , Строка > ( ) ;
crunchifyCompanyMap . положить ( 100 , Хруст ) ;
crunchifyCompanyMap . положить ( 250 , Гугл ) ;
crunchifyCompanyMap . положить ( 300 , «Яблоко» ) ;
crunchifyCompanyMap . положить ( 275 , «Фейсбук» ) ;
crunchifyCompanyMap . положить ( 325 , «Твиттер» ) ; // ПРИМЕЧАНИЕ: это номера образцов
log ( Давайте получим потолокEntry: + crunchifyCompanyMap . floorKey ( 200 ) ) ; // Возвращает сопоставление значения ключа, связанного с
// Наименьший ключ больше или равен
// данный ключ
log ( Давайте сначала получим ключ: + crunchifyCompanyMap . firstKey ( ) ) ; // Возвращает первый (самый низкий) ключ
log ( «Давайте получим lastEntry:» + crunchifyCompanyMap . lastEntry ( ) ) ; // Возвращает наибольший ключ
log ( Давайте получим floorEntry: + crunchifyCompanyMap . floorKey ( 320 ) ) ; // Возвращает наибольший ключ, меньший или равный
// данный ключ
NavigableSet < Integer > crunchifyNavSet знак равно crunchifyCompanyMap . downndingKeySet ( ) ; // Возвращает обратный порядок NavigableSet
// просмотр ключей, содержащихся в этой карте.
log ( / nЗдесь NavigableSet в обратном порядке ~~~~~~~~~~~~~~~~ ) ;
Iterator < Integer > crunchifyIterator знак равно crunchifyNavSet . итератор ( ) ; // Стандартный Java Iterator
в то время как ( crunchifyIterator . hasNext ( ) ) { // Возвращает true, если в итерации больше элементов
целое число mapKey знак равно crunchifyIterator . следующий ( ) ;
log ( mapKey . toString ( ) ) ;
}
log ( / nLet сделать некоторые отладки ~~~~~~~~~~~~~~~~ ) ;
log ( pollFirstEntry: + crunchifyCompanyMap . pollFirstEntry ( ) ) ; // Удаляет и возвращает отображение ключ-значение, связанное с
// наименьший ключ в этой карте
log ( сейчас firstEntry: + crunchifyCompanyMap . firstEntry ( ) ) ;
log ( pollLastEntry: + crunchifyCompanyMap . pollLastEntry ( ) ) ; // Удаляет и возвращает отображение ключ-значение, связанное с
// самый большой ключ на этой карте
log ( теперь lastEntry: + crunchifyCompanyMap . lastEntry ( ) ) ;
}
частный статический недействительным log ( Строка результат ) {
Система. вне. println ( результат ) ;
}
}

Выход консоли Eclipse:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Давайте получим потолокEntry: 250
Давайте получить первый ключ : 100
Давайте получим lastEntry: 325 = Twitter
Давайте получить floorEntry : +300
Вот Обратный порядок NavigableSet ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
325
300
275
250
100
Давайте делать некоторая отладка ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
pollFirstEntry : 100 = хруст
сейчас firstEntry : 250 = Google
pollLastEntry : 325 = Twitter
теперь lastEntry : 300 = яблоко

Сравнение ConcurrentHashMap и ConcurrentSkipListMap

  • ConcurrentSkipListMap гарантирует O(log(n)) производительность по времени для большинства операций, таких как firstKey, firstEntry, lastEntry, pollFirstEntry, pollLastEntry и т. д.
  • ConcurrentSkipListMap не позволяет изменять количество одновременных потоков .
  • ConcurrentSkipListMap является одновременно NavigableMap и SortedMap (например, Java Set).
  • ConcurrentSkipListMap — это список пропуска.

Когда использовать ConcurrentSkipListMap?

Таким образом, в основном, если вам нужен более быстрый обход в порядке, и если вы полностью готовы к дополнительным затратам на вставку , используйте ConcurrentSkipListMap. Данные будут отсортированы по умолчанию. Вы также можете использовать TreeMap, если вам не нужно использовать объект в параллельной среде.

Сравнение TreeMap и ConcurrentSkipListMap

  • TreeMap не синхронизируется
  • Итераторы, возвращаемые методом iterator () из «методов представления коллекции» Map, работают быстро. означает, что любая структурная модификация, сделанная в TreeMap во время итерации с использованием любого из 3 итераторов, вызовет исключение ConcurrentModificationException.
  • Оба отсортированы в естественном порядке .
  • И то, и другое не допускает значение NULL в ключе, но вы можете поместить больше NULL в значение.
  • O(lon(n)) сложность.
ЧИТАТЬ ТАКЖЕ:  Как конвертировать HashMap в ArrayList в Java?

Сравнение ConcurrentHashMap и LinkedHashMap

  • LinkedHashMap упорядочен, но не безопасен для потоков
  • ConcurrentHashMap является поточно-ориентированным, но не упорядоченным

Вот результат Eclipse Debug для вышеуказанной Java-программы:

Учебник по Java ConcurrentNavigableMap и ConcurrentSkipListMap со всеми подробностями (java.util.concurrent. *)

0.00 (0%) 0 votes

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь