1. 程式人生 > 程式設計 >c# 例項——繪製波浪線(附原始碼)

c# 例項——繪製波浪線(附原始碼)

集合

目錄

#屬性說明

  • 預設容量 / DEFAULT_CAPACITY

  • 負載因子 / Factor

    擴容門檻 / Threshold == 當前容量 * 負載因子

  • 擴容容量

  • 連結串列轉紅黑樹的閾值/ TREEIFY_THRESHOLD

#Collection子類

預設容量 負載因子 擴容門檻 擴容容量
ArrayList / 靜態連結串列 10 1 10 右移一位,擴容原來的一半
Vector/ 靜態連結串列 10 1 10 右移一位,擴容原來的一半
HashSet/ 陣列 + 連結串列 + 紅黑樹 16 0.75 12 同HashMap

注意點:

  1. set允許儲存一個null

  2. 以上除了Vector執行緒安全以外, 其餘執行緒都不安全

但是要用如下方法替代Vector

  • Collections.synchronizeList()
  • CopyOnWriterList<>()

同理Set

  • Collections.synchronizeSet()
  • CopyOnWriterSet<>()
  1. Arrays.asList()

    • 返回的是該工具類的內部類, 沒有add()remove()方法

      如果呼叫就會報出java.lang.UnsupportedOperationException

    • 該方法不能傳入基本型別的陣列, 但是可以傳入Object型別的陣列

       Integer[] a = {1,2,3,4}; //有效
       int[] b = {1,2,3,4}; //無效
      

      引數是一個可變引數, 列印會呼叫該內部類的toString()方法

  2. 對集合遍歷時不能新增和刪除

    遍歷時呼叫ItrcheckForComodification(),會檢查modCountexceptedModCount,而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可用作棧, 佇列, 雙端佇列