24 JUC中常見的集合

2021-10-06 02:34:19 字數 2460 閱讀 7440

juc集合包中的list和set

juc集合包中map

juc包中queue

concurrenthashmap

concurrentskiplistmap

copyonwritearraylist

concurrentskiplistset

copyonwritearrayset

concurrentlinkedqueue

deque

參考

主體內容包括collection集合和map類;而collection集合又可以劃分為list(佇列)和set(集合)。

list的實現類

list的實現類主要有: linkedlist, arraylist, vector, stack。

set的實現類

set的實現類主要有: hastset和treeset。

map的實現類

map的實現類主要有: hashmap,weakhashmap, hashtable和treemap。

juc集合包中的list和set實現類包括: copyonwritearraylist, copyonwritearrayset和concurrentskiplistset

juc集合包中map的實現類包括: concurrenthashmap和concurrentskiplistmap

功能和hashmap基本一致,內部使用紅黑樹實現的。

特性:內部使用跳表實現的,放入的元素會進行排序,排序演算法支援2種方式來指定:

通過構造方法傳入乙個comparator

放入的元素實現comparable介面

上面2種方式必選乙個,如果2種都有,走規則1。

特性:實現list的介面的,一般我們使用arraylist、linkedlist、vector,其中只有vector是執行緒安全的,可以使用collections靜態類的synchronizedlist方法對arraylist、linkedlist包裝為執行緒安全的list,不過這些方式在保證執行緒安全的情況下效能都不高。

copyonwritearraylist是執行緒安全的list,內部使用陣列儲存資料,集合中多執行緒並行操作一般存在4種情況:讀讀、讀寫、寫寫、寫讀,這個只有在寫寫操作過程中會導致其他執行緒阻塞,其他3種情況均不會阻塞,所以讀取的效率非常高。

可以看一下這個類的名稱:copyonwrite,意思是在寫入操作的時候,進行一次自我複製,換句話說,當這個list需要修改時,並不修改原有內容(這對於保證當前在讀執行緒的資料一致性非常重要),而是在原有存放資料的陣列上產生乙個副本,在副本上修改資料,修改完畢之後,用副本替換原來的陣列,這樣也保證了寫操作不會影響讀

特性:有序的set,內部基於concurrentskiplistmap實現的,放入的元素會進行排序,排序演算法支援2種方式來指定:

通過構造方法傳入乙個comparator

放入的元素實現comparable介面

上面2種方式需要實現乙個,如果2種都有,走規則1

特性:內部使用copyonwritearraylist實現的,將所有的操作都會**給copyonwritearraylist。

特性:高效併發佇列,內部使用鍊錶實現的。

特性:雙向佇列(deque)是queue的乙個子介面,雙向佇列是指該佇列兩端的元素既能入隊(offer)也能出隊(poll),如果將deque限制為只能從一端入隊和出隊,則可實現棧的資料結構。對於棧而言,有入棧(push)和出棧(pop),遵循先進後出原則。

乙個線性 collection,支援在兩端插入和移除元素。名稱 deque 是「double ended queue(雙端佇列)」的縮寫,通常讀為「deck」。大多數 deque 實現對於它們能夠包含的元素數沒有固定限制,但此介面既支援有容量限制的雙端佇列,也支援沒有固定大小限制的雙端佇列。

此介面定義在雙端佇列兩端訪問元素的方法。提供插入、移除和檢查元素的方法。每種方法都存在兩種形式:一種形式在操作失敗時丟擲異常,另一種形式返回乙個特殊值(null 或 false,具體取決於操作)。插入操作的後一種形式是專為使用有容量限制的 deque 實現設計的;在大多數實現中,插入操作不能失敗.

此介面擴充套件了 queue介面。在將雙端佇列用作佇列時,將得到 fifo(先進先出)行為。將元素新增到雙端佇列的末尾,從雙端佇列的開頭移除元素。從 queue 介面繼承的方法完全等效於 deque 方法,如下表所示:

實現了deque介面,內部使用鍊錶實現的高效的併發雙端佇列。

特性:

面試系列 JUC中常見的鎖

公平鎖 是指多個執行緒按照申請鎖的順序來獲取鎖類似排對打飯,先來後到 非公平鎖 是指在多執行緒獲取鎖的順序並不是按照申請鎖的順序,有可能後申請的執行緒比先申請的執行緒優先獲取到鎖,在高併發的情況下,有可能造成優先順序反轉或者飢餓現象 並發包reentrantlock的建立可以指定建構函式的boole...

面試系列 JUC中常見的鎖

公平鎖 是指多個執行緒按照申請鎖的順序來獲取鎖類似排對打飯,先來後到 非公平鎖 是指在多執行緒獲取鎖的順序並不是按照申請鎖的順序,有可能後申請的執行緒比先申請的執行緒優先獲取到鎖,在高併發的情況下,有可能造成優先順序反轉或者飢餓現象 並發包reentrantlock的建立可以指定建構函式的boole...

Python中常見的集合內建函式

一 集合型別方法 方法名稱 操作 s.issubset t 如果s是t的子集,則返回true,否則返回false s.issuperset t 如果s是t的超集,則返回true,否則返回false s.union t 返回乙個新集合,該集合是s和t的並集 s.intersection t 返回乙個新...