ConcurrentSkipListMap 類是的成員Java集合框架。它是在JDK 1.6中引入的,它屬於java.util.concurrent包。 ConcurrentSkipListMap 是一個可擴展的實現ConcurrentNavigableMap。所有元素都根據自然順序或按Comparator Interface在施工期間通過。這個類使用並發變體SkipList數據結構提供日誌(n)插入、刪除、更新和訪問操作的時間成本。這些操作對於多個線程並發執行是安全的。
聲明
public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V> implements ConcurrentNavigableMap<K,V>, Cloneable, Serializable
這裏,K 是鍵對象類型,V 是值對象類型。
ConcurrentSkipListMap的層次結構
它實現了可串行化,可克隆,ConcurrentMap,ConcurrentNavigableMap,Map,NavigableMap Interface,SortedMap Interface接口和擴展抽象映射<K, V>類。
ConcurrentSkipListMap 的構造函數
1. ConcurrentSkipListMap():構造一個新的空映射,根據鍵的自然順序排序。
ConcurrentSkipListMap<K, V> cslm = new ConcurrentSkipListMap<K, V>();
2. ConcurrentSkipListMap(Comparator<? super K> comparator):構造一個新的、空的映射,根據指定的比較器排序。
ConcurrentSkipListMap<K, V> cslm = new ConcurrentSkipListMap<K, V>(Comparator<? super K> comparator);
3. ConcurrentSkipListMap(Map<? extends K,? extends V> m):構造一個新映射,其中包含與給定映射相同的映射,並根據鍵的自然順序排序。
ConcurrentSkipListMap<K, V> cslm = new ConcurrentSkipListMap<K, V>(Map<? extends K,? extends V> m);
4. ConcurrentSkipListMap(SortedMap<K,? extends V> m):構造一個包含相同映射的新映射,並使用與指定排序映射相同的順序。
ConcurrentSkipListMap<K, V> cslm = new ConcurrentSkipListMap<K, V>(SortedMap<K,? extends V> m);
示例
Java
// Java Program to Demonstrate
// ConcurrentSkipListMap
import java.io.*;
import java.util.*;
import java.util.concurrent.*;
class ConcurrentSkipListMapExample {
public static void main(String[] args)
{
// create an instance of ConcurrentSkipListMap
ConcurrentSkipListMap<String, String> cslm
= new ConcurrentSkipListMap<String, String>();
// Add mappings using put method
cslm.put("3", "Geeks");
cslm.put("2", "from");
cslm.put("1", "Hi!");
cslm.put("5", "Geeks");
cslm.put("4", "for");
// print to the console
System.out.println("Initial Map : " + cslm);
// print key-value pair whose key is greater than 2
System.out.println("ceilingEntry-2: "
+ cslm.ceilingEntry("2"));
// get the descending key set
NavigableSet navigableSet = cslm.descendingKeySet();
System.out.println("descendingKeySet: ");
// Iterate through the keySet
Iterator itr = navigableSet.iterator();
while (itr.hasNext()) {
String s = (String)itr.next();
System.out.println(s);
}
// print the first mapping
System.out.println("firstEntry: "
+ cslm.firstEntry());
// print the last mapping
System.out.println("lastEntry: "
+ cslm.lastEntry());
// remove the first mapping and print it
System.out.println("pollFirstEntry: "
+ cslm.pollFirstEntry());
// print the first mapping
System.out.println("now firstEntry: "
+ cslm.firstEntry());
// remove the last mapping and print it
System.out.println("pollLastEntry: "
+ cslm.pollLastEntry());
// print the last mapping
System.out.println("now lastEntry: "
+ cslm.lastEntry());
}
}
Initial Map : {1=Hi!, 2=from, 3=Geeks, 4=for, 5=Geeks} ceilingEntry-2: 2=from descendingKeySet: 5 4 3 2 1 firstEntry: 1=Hi! lastEntry: 5=Geeks pollFirstEntry: 1=Hi! now firstEntry: 2=from pollLastEntry: 5=Geeks now lastEntry: 4=for
Basic Operations
1. 添加映射
ConcurrentSkipListMap 的 put() 方法將指定值與此映射中的指定鍵相關聯。如果映射之前包含鍵的映射,則舊值將被替換。
Java
// Java Program to demonstrate adding
// mappings to a ConcurrentSkipListMap
import java.util.concurrent.*;
class AddingMappingsExample {
public static void main(String[] args)
{
// Initializing the map
ConcurrentSkipListMap<Integer, Integer> cslm
= new ConcurrentSkipListMap<Integer, Integer>();
// Adding elements to this map
for (int i = 1; i <= 9; i++)
cslm.put(i, i);
// put() operation on the map
System.out.println("After put(): " + cslm);
}
}
After put(): {1=1, 2=2, 3=3, 4=4, 5=5, 6=6, 7=7, 8=8, 9=9}
2. 刪除映射
ConcurrentSkipListMap remove()ConcurrentSkipListMap 的方法從此映射中刪除指定鍵的映射。如果該特定鍵沒有映射,則該方法返回 null。執行此方法後,Map的大小會減小。要刪除Map的第一個條目和最後一個條目,我們可以使用pollFirstEntry()和pollLastEntry()分別。
Java
// Java Program Demonstrate removing
// mappings from ConcurrentSkipListMap
import java.util.concurrent.*;
class RemovingMappingsExample {
public static void main(String[] args)
{
// Initializing the map
ConcurrentSkipListMap<Integer, Integer> cslm
= new ConcurrentSkipListMap<Integer, Integer>();
// Adding elements to this map
for (int i = 1; i <= 6; i++)
cslm.put(i, i);
// remove() operation on the map
cslm.remove(5);
// print the modified map
System.out.println("After remove(): " + cslm);
// remove the first mapping and print it
System.out.println("pollFirstEntry: "
+ cslm.pollFirstEntry());
// remove the last mapping and print it
System.out.println("pollLastEntry: "
+ cslm.pollLastEntry());
// Print final map
System.out.println("map contents: " + cslm);
}
}
After remove(): {1=1, 2=2, 3=3, 4=4, 6=6} pollFirstEntry: 1=1 pollLastEntry: 6=6 map contents: {2=2, 3=3, 4=4}
3. 迭代
我們可以使用 Iterator 接口來遍曆 Collection Framework 的任何結構。由於迭代器使用一種類型的數據,因此我們使用 Entry< ? , ? > 將兩種不同的類型解析為兼容的格式。然後使用 next() 方法打印 ConcurrentSkipListMap 的元素。
Java
// Java Program to demonstrate iterating
// over ConcurrentSkipListMap
import java.util.concurrent.*;
import java.util.*;
class IteratingExample {
public static void main(String[] args)
{
// create an instance of ConcurrentSkipListMap
ConcurrentSkipListMap<Integer, Integer> cslm
= new ConcurrentSkipListMap<>();
// Add mappings using put method
for (int i = 0; i < 6; i++) {
cslm.put(i, i);
}
// Create an Iterator over the
// ConcurrentSkipListMap
Iterator<ConcurrentSkipListMap
.Entry<Integer, Integer> > itr
= cslm.entrySet().iterator();
// The hasNext() method is used to check if there is
// a next element The next() method is used to
// retrieve the next element
while (itr.hasNext()) {
ConcurrentSkipListMap
.Entry<Integer, Integer> entry
= itr.next();
System.out.println("Key = " + entry.getKey()
+ ", Value = "
+ entry.getValue());
}
}
}
Key = 0, Value = 0 Key = 1, Value = 1 Key = 2, Value = 2 Key = 3, Value = 3 Key = 4, Value = 4 Key = 5, Value = 5
ConcurrentSkipListMap的方法
METHOD |
DESCRIPTION |
---|---|
ceilingEntry(K key) | 返回與大於或等於給定鍵的最小鍵關聯的鍵值映射,如果沒有這樣的條目,則返回 null。 |
ceilingKey(K key) | 返回大於或等於給定鍵的最小鍵,如果沒有這樣的鍵,則返回 null。 |
clear() | 從此Map中刪除所有映射。 |
clone() | 返回此 ConcurrentSkipListMap 實例的淺拷貝。 |
計算(K key, BiFunction<? super K,? super V,? extends V> remappingFunction) | 嘗試計算指定鍵及其當前映射值的映射(如果沒有當前映射,則為 null)。 |
computeIfAbsent(K key, Function<? super K,? 擴展 V> 映射函數) | 如果指定的鍵尚未與值關聯,則嘗試使用給定的映射函數計算其值並將其輸入到此映射中,除非為 null。 |
computeIfPresent(K key, BiFunction<? super K,? super V,? extends V> remappingFunction) | 如果指定鍵的值存在,則嘗試計算給定鍵及其當前映射值的新映射。 |
containsKey(Object key) | 如果此映射包含指定鍵的映射,則返回 true。 |
containsValue(Object value) | 如果此映射將一個或多個鍵映射到指定值,則返回 true。 |
entrySet() | 返回此映射中包含的映射的集合視圖。 |
equals(Object o) | 比較指定對象與此映射是否相等。 |
firstEntry() | 返回與此映射中最小鍵關聯的鍵值映射,如果映射為空,則返回 null。 |
firstKey() | 返回當前此映射中的第一個(最低)鍵。 |
floorEntry(K key) | 返回與小於或等於給定鍵的最大鍵關聯的鍵值映射,如果不存在這樣的鍵,則返回 null。 |
floorKey(K key) | 返回小於或等於給定鍵的最大鍵,如果沒有這樣的鍵,則返回 null。 |
get(Object key) | 返回指定鍵映射到的值,如果此映射不包含該鍵的映射,則返回 null。 |
getOrDefault(Object key, V defaultValue) | 返回指定鍵映射到的值,如果此映射不包含該鍵的映射,則返回給定的 defaultValue。 |
headMap(K toKey) | 返回此映射的部分視圖,其鍵嚴格小於 toKey。 |
headMap(K toKey, boolean inclusive) | 返回此映射中鍵小於(或等於,如果包含為 true)toKey 的部分的視圖。 |
higherEntry(K key) | 返回與嚴格大於給定鍵的最小鍵關聯的鍵值映射,如果不存在這樣的鍵,則返回 null。 |
higherKey(K key) | 返回嚴格大於給定鍵的最小鍵,如果不存在這樣的鍵,則返回 null。 |
keySet() | 返回此映射中包含的鍵的 NavigableSet 視圖。 |
lastEntry() | 返回與此映射中最大鍵關聯的鍵值映射,如果映射為空,則返回 null。 |
lastKey() | 返回當前此映射中的最後一個(最高)鍵。 |
lowerEntry(K key) | 返回與嚴格小於給定鍵的最大鍵關聯的鍵值映射,如果不存在這樣的鍵,則返回 null。 |
lowerKey(K key) | 返回嚴格小於給定鍵的最大鍵,如果不存在這樣的鍵,則返回 null。 |
merge(K key, V value, BiFunction<? super V,? super V,? extends V> remappingFunction) | 如果指定的鍵尚未與值關聯,則將其與給定值關聯。 |
pollFirstEntry() | 刪除並返回與此映射中最小鍵關聯的鍵值映射,如果映射為空,則返回 null。 |
pollLastEntry() | 刪除並返回與此映射中最大鍵關聯的鍵值映射,如果映射為空,則返回 null。 |
put(K key, V value) | 將指定值與此映射中的指定鍵相關聯。 |
putIfAbsent(K key, V value) | 如果指定的鍵尚未與值關聯,則將其與給定值關聯。 |
ConcurrentSkipListMap remove() | 從此映射中刪除指定鍵的映射(如果存在)。 |
remove(Object key, Object value) | 僅當當前映射到給定值時才刪除鍵的條目。 |
replace(K key, V value) | 僅當當前映射到某個值時才替換鍵的條目。 |
replace(K key, V oldValue, V newValue) | 僅當當前映射到給定值時才替換鍵的條目。 |
subMap(K fromKey, boolean fromInclusive, K toKey, boolean toInclusive) | 返回此映射的部分視圖,其鍵範圍為 fromKey 到 toKey。 |
subMap(K fromKey, K toKey) | 返回此映射的部分視圖,其鍵範圍從 fromKey(包含)到 toKey(不包含)。 |
tailMap(K fromKey) | 返回此映射中鍵大於或等於 fromKey 的部分的視圖。 |
tailMap(K fromKey, boolean inclusive) | 返回此映射中鍵大於(或等於,如果包含為 true)fromKey 的部分的視圖。 |
values() | 返回此映射中包含的值的集合視圖。 |
類 java.util.AbstractMap 中聲明的方法
METHOD |
DESCRIPTION |
---|---|
AbstractMap hashCode() | 返回此映射的哈希代碼值。 |
AbstractMap isEmpty() | 如果此映射不包含鍵值映射,則返回 true。 |
AbstractMap putAll() | 將指定映射中的所有映射複製到此映射(可選操作)。 |
AbstractMap size() | 返回此映射中鍵值映射的數量。 |
toString() | 返回此Map的字符串表示形式。 |
接口 java.util.concurrent.ConcurrentMap 中聲明的方法
METHOD |
DESCRIPTION |
---|---|
forEach(BiConsumer<?超級 K,?超級 V> 操作) | 對此映射中的每個條目執行給定的操作,直到處理完所有條目或該操作引發異常。 |
ReplaceAll(BiFunction<? super K,? super V,? 擴展 V> 函數) | 將每個條目的值替換為在該條目上調用給定函數的結果,直到處理完所有條目或函數引發異常。 |
接口 java.util.concurrent.ConcurrentNavigableMap 中聲明的方法
METHOD |
DESCRIPTION |
---|---|
descendingKeySet() | 返回此映射中包含的鍵的逆序 NavigableSet 視圖。 |
descendingMap() | 返回此映射中包含的映射的逆序視圖。 |
navigableKeySet() | 返回此映射中包含的鍵的 NavigableSet 視圖。 |
接口 java.util.Map 中聲明的方法
METHOD |
DESCRIPTION |
---|---|
Map hashCode() | 返回此映射的哈希代碼值。 |
Map isEmpty() | 如果此映射不包含鍵值映射,則返回 true。 |
Map putAll() | 將指定映射中的所有映射複製到此映射(可選操作)。 |
Map size() | 返回此映射中鍵值映射的數量。 |
接口 java.util.SortedMap 中聲明的方法
METHOD |
DESCRIPTION |
---|---|
SortedMap comparator() | 返回用於對該映射中的鍵進行排序的比較器,如果該映射使用其鍵的自然順序,則返回 null。 |
相關用法
- Java ConcurrentSkipListMap ceilingKey()用法及代碼示例
- Java ConcurrentSkipListMap clear()用法及代碼示例
- Java ConcurrentSkipListMap clone()用法及代碼示例
- Java ConcurrentSkipListMap containsKey()用法及代碼示例
- Java ConcurrentSkipListMap containsValue()用法及代碼示例
- Java ConcurrentSkipListMap equals()用法及代碼示例
- Java ConcurrentSkipListMap isEmpty()用法及代碼示例
- Java ConcurrentSkipListMap put()用法及代碼示例
- Java ConcurrentSkipListMap remove()用法及代碼示例
- Java ConcurrentSkipListMap size()用法及代碼示例
- Java ConcurrentSkipListSet add()用法及代碼示例
- Java ConcurrentSkipListSet ceiling()用法及代碼示例
- Java ConcurrentSkipListSet clear()用法及代碼示例
- Java ConcurrentSkipListSet clone()用法及代碼示例
- Java ConcurrentSkipListSet comparator()用法及代碼示例
- Java ConcurrentSkipListSet contains()用法及代碼示例
- Java ConcurrentSkipListSet descendingIterator()用法及代碼示例
- Java ConcurrentSkipListSet descendingSet()用法及代碼示例
- Java ConcurrentSkipListSet equals()用法及代碼示例
- Java ConcurrentSkipListSet first()用法及代碼示例
- Java ConcurrentSkipListSet floor()用法及代碼示例
- Java ConcurrentSkipListSet headSet()用法及代碼示例
- Java ConcurrentSkipListSet higher()用法及代碼示例
- Java ConcurrentSkipListSet isEmpty()用法及代碼示例
- Java ConcurrentSkipListSet iterator()用法及代碼示例
注:本文由純淨天空篩選整理自Ganeshchowdharysadanala大神的英文原創作品 ConcurrentSkipListMap in Java with Examples。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。