Содержание
Некоторое время назад я написал статью о разнице между 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.
|
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))сложность.
Сравнение ConcurrentHashMap и LinkedHashMap
- LinkedHashMap упорядочен, но не безопасен для потоков
- ConcurrentHashMap является поточно-ориентированным, но не упорядоченным
Вот результат Eclipse Debug для вышеуказанной Java-программы:
0.00 (0%) 0 votes








