c# 例項——繪製波浪線(附原始碼)
阿新 • • 發佈:2020-07-15
集合
目錄
#屬性說明
-
預設容量 / DEFAULT_CAPACITY
-
負載因子 / Factor
擴容門檻 / Threshold == 當前容量 * 負載因子
-
擴容容量
-
連結串列轉紅黑樹的閾值/ TREEIFY_THRESHOLD
#Collection子類
預設容量 | 負載因子 | 擴容門檻 | 擴容容量 | |
---|---|---|---|---|
ArrayList / 靜態連結串列 | 10 | 1 | 10 | 右移一位,擴容原來的一半 |
Vector/ 靜態連結串列 | 10 | 1 | 10 | 右移一位,擴容原來的一半 |
HashSet/ 陣列 + 連結串列 + 紅黑樹 | 16 | 0.75 | 12 | 同HashMap |
注意點:
-
set
允許儲存一個null
值 -
以上除了
Vector
執行緒安全以外, 其餘執行緒都不安全
但是要用如下方法替代Vector
Collections.synchronizeList()
CopyOnWriterList<>()
同理Set
Collections.synchronizeSet()
CopyOnWriterSet<>()
-
Arrays.asList()
-
返回的是該工具類的內部類, 沒有
add()
和remove()
方法如果呼叫就會報出
java.lang.UnsupportedOperationException
-
該方法不能傳入基本型別的陣列, 但是可以傳入
Object
型別的陣列Integer[] a = {1,2,3,4}; //有效 int[] b = {1,2,3,4}; //無效
引數是一個可變引數, 列印會呼叫該內部類的
toString()
方法
-
-
對集合遍歷時不能新增和刪除
遍歷時呼叫
Itr
的checkForComodification()
,會檢查modCount
和exceptedModCount
,而exceptedModCount
的值就是modeCount
, 如果兩者不同, 就會丟擲異常, 但是add
或是remove
時會修改modCount
#Map
map不屬於Collection子類, 但是同屬於java.util
預設容量 | 負載因子 | 擴容門檻 | 擴容容量 | 轉紅黑樹 | |
---|---|---|---|---|---|
HashMap/ 陣列 + 連結串列 + 紅黑樹 | 16 | 0.75 | 12 | 原來的一倍 | 8 |
先按照hash
值找到需要儲存的位置, 然後通過對應key
, 找到value
當連結串列中元素超過8, 轉為紅黑樹
陣列用於儲存Entry
(對應原碼中table
, 包含鍵值對)
儲存時通過Key
的hash值找到對應table
上的位置, 將Entry
鍵入
HashMap
執行緒不安全, 使用如下方法替代
-
Collections.synchronizeMap()
-
ConCurrentHashMap<>()
#LinkedList
Linked可用作棧, 佇列, 雙端佇列