共用方式為


定義集合

集合是一組聚集在一起的類似型別的物件。

任何型別的物件都能群組成單一的 Object 型別集合,以充分利用語言中固有的建構。 例如,C# foreach 陳述式 (Visual Basic 中為 for each) 要求集合中的所有物件都屬於單一型別。

然而,在 Object 型別的集合中,額外處理會在元素上個別進行,例如 Boxing 和 Unboxing 或轉換,這會影響集合的效能。 如果在 Object 型別的集合中儲存或擷取實值型別 (Value Type) 的話,Boxing 和 Unboxing 基本上會發生。

如果元素的型別與集合的目標型別相同 (例如從 StringCollection 儲存或擷取字串),則泛型集合 (例如 List<T>) 和強型別 (Strongly Typed) 的非泛型集合 (例如 StringCollection) 可以避免這些效能受到影響。 此外,強型別集合還會自動執行加入至集合的各個元素的型別驗證。 因此,強烈建議您盡可能使用泛型集合類別。

所有直接或間接實作 ICollection 介面或 ICollection<T> 泛型介面的集合,除了加入、移除或搜尋元素的方法以外,還共用許多功能:

  • 列舉程式。

    列舉程式就是會逐一查看其相關集合的物件。 它可以被想像成對集合中任何元素的可移動指標。 列舉程式只可以與一個集合相關聯,但集合可以有多個列舉程式。 C# foreach 陳述式 (Visual Basic 中為 for each) 會使用列舉程式,並隱藏操作列舉程式的複雜性。

  • 同步處理成員 (僅限 System.Collections 類別)。

    對於 System.Collections 命名空間中的舊版集合型別,同步處理在存取集合的項目時會提供某種程度的執行緒安全性。 根據預設,集合並不是安全執行緒 (Thread-Safe)。 如果您需要可擴充且有效率的多執行緒集合存取,請使用 System.Collections.Concurrent 命名空間中的其中一個類別。 如需詳細資訊,請參閱 安全執行緒集合

    System.Collections 命名空間中只有少數類別會提供 Synchronize 方法,可以替集合建立安全執行緒包裝函式。 但所有 System.Collections 命名空間中的所有類別都提供 SyncRoot 屬性,好讓衍生類別 (Derived Class) 用以建立自己的安全執行緒包裝函式。 IsSynchronized 屬性也被提供,用來判斷集合是否為安全執行緒。 ICollection<T> 泛型介面並不提供同步功能。

  • CopyTo 方法。

    所有集合都可以使用 CopyTo 方法複製到陣列中;然而,新陣列中元素的順序是根據列舉程式傳回它們的順序決定的。 產生的陣列永遠是一維的 (以零為下限)。

請注意,ICollection<T> 泛型介面有一些額外的成員,而這些成員是非泛型介面所沒有的。

System.Collections 命名空間的部分類別實作了下列功能:

  • 容量和計數

    集合的容量是它可以包含的元素數。 集合的計數是它實際包含的元素數。 BitArray 是一個特例;它的容量與其長度相同,也和計數相同。 某些集合會隱藏容量、計數或兩者都是。

    所有集合在到達目前容量時會自動擴充容量。 記憶體將重新配置,而元素也會從舊集合複製到新集合。 這會減少使用集合所需的程式碼;然而,集合的效能仍可能會受到負面的影響。 避免因多個重新配置所造成不良效能的最佳方式是,將初始容量設定為估計的集合大小。

  • 下限

    集合的下限為其第一個元素的索引。 System.Collections 命名空間中所有索引集合的下限都是零。 雖然 Array 的預設下限為零,不過使用 CreateInstance 來建立 Array 類別的執行個體時,可以定義不同的下限。

System.Collections 類別通常可以分為三個類型:

  • 常用集合

    這是資料集合的一般變形,例如雜湊表、佇列、堆疊、字典和清單。 許多常用的集合都具有非泛型版本、泛型版本和安全執行緒泛型版本。

  • 位元集合

    這是其元素為位元旗標的集合。 它們的行為表現有些不同於其他集合。

  • 特殊化集合

    這是用途非常特殊的集合,通常用來處理特定型別的元素,例如 StringDictionary

請務必小心選擇集合類別。 因為各個集合都有它自己的功能,每一個功能也都有它自己的限制。 愈特殊化的集合,會愈受限制。 如需選擇集合的秘訣,請參閱選取集合類別

請參閱

參考

System.Collections

System.Collections.Specialized

System.Collections.Generic

System.Collections.Concurrent

概念

選取集合類別

其他資源

集合和資料結構