集合和資料結構

2021-09-25 08:45:49 字數 1976 閱讀 8624

類似的資料在作為集合而儲存和操作時通常可以得到更高效地處理。 可使用 system.array 類或 system.collections、system.collections.generic、 system.collections.concurrent 和 system.collections.immutable 命令空間中的類來新增、移除和修改集合中的單個元素或一系列元素。

有兩種主要的集合型別:泛型集合和非泛型集合。 泛型集合被新增在 .net framework 2.0 中,並提供編譯時型別安全的集合。 因此,泛型集合通常能提供更好的效能。 構造泛型集合時,它們接受型別形參;並在向該集合新增項或從該集合刪除項時無需在 object 型別間來回轉換。 此外,windows 應用商店 應用程式支援大多數泛型集合。 非泛型集合將項儲存為 object,需要強制轉換,並且大多數不支援 windows 應用商店 應用程式開發。 但是,你可能會看到在較舊的**中有非泛型集合。

自 .net framework 4 起,system.collections.concurrent 命名空間中的集合可提供高效的執行緒安全操作,以便從多個執行緒訪問集合項。 system.collections.immutable 命名空間(nuget 包)中的不可變集合類本質上就是執行緒安全的,因為是在原始集合的副本上執行操作,且不能修改原始集合。

常用集合功能

所有集合都提供用於在集合中新增、刪除或查詢項的方法。 此外,所有直接或間接實現 icollection 介面或 icollection 介面的集合均共享這些功能:

可列舉集合

.net framework 集合實現 system.collections.ienumerable

或 system.collections.generic.ienumerable,以啟用要迴圈訪問的集合。 可將列舉器看作集合中可指向任何元素的可移動指標。 foreach, in 語句和 for each…next 語句使用 getenumerator 方法公開的列舉器並隱藏操作列舉器的複雜性。 此外,任何實現 system.collections.generic.ienumerable 的集合均被認為是可查詢型別,並可使用 linq 對其進行查詢 。 linq 查詢提供資料訪問的乙個通用模式。 它們通常比標準 foreach 迴圈更簡潔、更具可讀性,並提供篩選、排序和分組功能。 linq 查詢還可提高效能。 有關詳細資訊。

可將集合內容複製到陣列

可使用 copyto 方法將所有集合複製到陣列中;但新陣列中的元素順序是以列舉器返回元素的順序為依據。 得到的陣列始終是一維的,下限為零。

此外,許多集合類包含下列功能:

容量和計數屬性

集合的容量是它可包含的元素數。 集合的計數是它實際所含的元素數。 某些集合隱藏容量、計數或將這兩者都隱藏。

達到當前容量時,大多數集合會自動擴充套件容量。 重新分配記憶體並將元素從舊集合複製到新集合。 這減少了要求使用集合的**;但集合的效能可能會受到不利影響。 例如,對 list 來說,如果 count 比 capacity 少,那麼新增項就是一項 o(1) 操作。如需增加容量以容納新元素,則新增項成為 o(n) 操作,其中 n 是 count。 避免因多次重新分配而導致的效能較差的最佳方式是:將初始容量設定為集合的估計大小。

bitarray 是一種特殊情況;它的容量與其長度相同,而其長度與其計數相同。

下限一致

集合的下限是其第乙個元素的索引。 system.collections 命名空間中的所有索引集合的下限均為零,這表示它們從 0 開始建立索引。 array 預設下限為零,但使用 array.createinstance 建立 array 類的例項時可定義其他下限 。

同步以從多個執行緒進行訪問(僅 system.collections 類)。

system.collections 命名空間中的非泛型集合型別通過同步提供一些執行緒安全性;通常通過 syncroot 和 issynchronized 成員公開。 這些集合不是預設為執行緒安全的。 如需對集合進行可擴充套件、高效的多執行緒訪問,請使用 system.collections.concurrent 命名空間中的乙個類或考慮使用不可變集合。

資料結構 集合

陣列 陣列長度在初始化的時候就已經固定,不適合物件數量未知的情況。下圖為collection 於的部落格 下圖為map 於網路 1.介紹一下list比較常用的集合 有序,值允許重複 1 arraylist 底層實現 private static final object defaultcapacit...

資料結構 集合

乙個識別符號 集合set 可以儲存多個資料,資料不能重複。集合與陣列的區別,集合的內容具有唯一性 全等匹配 宣告集合 let f70 newset f71 集合賦值 let f71 let f70 newset f71 集合賦值 f70.add 1 f70 add 2 f70.add 1 f70 a...

演算法和資料結構

演算法和資料結構 演算法和資料結構 千絲萬縷的聯絡 縱觀各種演算法書籍,大多都是將演算法和資料結構作為乙個整體來講述。資料結構就是陣列 樹結構等儲存或表現物件資料的結構。將演算法和資料結構作為整體講述,是因為必須依照演算法中的常用操作選擇資料結構。例如,事先將資料儲存在適當的樹形結構中,大多數情況下...