Scala 集合(三)
阿新 • • 發佈:2018-11-23
Scala 集合選擇
除了決定使用可變集合還是不可變集合,並行集合或非並行集合,在給定的場景下,你還需要決定究竟應該選擇什麼集合型別?
當可能同時有可變和不可變兩種選擇時,我將使用immutable.List(mutable.LinkedList)來表示不可變(可變)的選項。
你需要有序、可遍歷的序列嗎? 那就考慮immutable.List(mutable.LinkedList)、immutable.Vector 或mutable.ArrayBuffer。
List 提供了O(1) 的前插和取頭節點複雜度,但追加和讀取內部其他元素的複雜度為O(n)。由於Vector 是可持久的資料結構(如前面所討論的一樣),它的所有操作都是O(1) 複雜度。
如果你需要隨機訪問,ArrayBuffer 是更好的選擇。追加、更新和隨機訪問所需要的均攤時間複雜度均為O(1),但前插和刪除複雜度為O(n)。
所以,當你需要一個序列時,如果你多半與頭部元素打交道,主要使用List;如果你需要訪問一般元素,則使用Vector。Vector 是一個強大、通用的,具有優異全能表現的集合。不過,在有些情況下,ArrayBuffer 能提供更低的常數時間,從而降低開銷,提高效能。
其他的通用場景中,我們需要基於鍵的、O(1) 複雜度的元素存取,也就是數值根據鍵被儲存在immutable.Map(mutable.Map)中。同樣,immutable.Set(mutable.Set)被用來測試值是否存在。