c 中常用集合類和集合介面之集合類系列

2022-03-23 22:23:39 字數 2873 閱讀 1104

常用集合類:

陣列(array)的不足(即:集合與陣列的區別)

1. 陣列是固定大小的,不能伸縮。雖然system.array.resize這個泛型方法可以重置陣列大小,但是該方法是重新建立新設定大小的陣列,用的是舊陣列的元素初始化。隨後以前的陣列就廢棄!而集合卻是可變長的。

2. 陣列要宣告元素的型別,集合類的元素型別卻是object。

3. 陣列可讀可寫不能宣告唯讀陣列。集合類可以提供readonly方法以唯讀方式使用集合。

4. 陣列要有整數下標才能訪問特定的元素,然而很多時候這樣的下標並不是很有用。集合也是資料列表卻不使用下標訪問。很多時候集合有定製的下標型別,對於佇列和棧根本就不支援下標訪問!

陣列列表(arraylist)

arraylist可以儲存任何型別,不像list泛型那樣有嚴格要求,list更有效,arraylist就相當於是list。

arraylist類物件被設計成為乙個動態陣列型別,其容量會隨著需要而適當的擴充方法:

1:add()向陣列中新增乙個元素

2:remove()刪除陣列中的乙個元素

3:removeat(int i)刪除陣列中索引值為i的元素

4:reverse()反轉陣列的元素

5:sort()以從小到大的順序排列陣列的元素

6:clone()複製乙個陣列

system.collections命名空間包含介面和類,這些介面和類定義各種物件(如列表、佇列、位陣列、雜湊表和字典)的集合。system.collections.generic 命名空間包含定義泛型集合的介面和類,泛型集合允許使用者建立強型別集合,它能提供比非泛型強型別集合更好的型別安全性和效能。system.collections.specialized 命名空間包含專用的和強型別的集合,例如,鏈結的列表詞典、位向量以及只包含字串的集合。

列表(list)

可通過索引訪問的物件的強型別列表。提供用於對列表進行搜尋、排序和操作的方法,在決定使用list還是使用arraylist類(兩者具有類似的功能)時,記住list類在大多數情況下執行得更好並且是型別安全的。如果對list類的型別t使用引用型別,則兩個類的行為是完全相同的。但是如果對型別t使用值型別,則需要考慮實現和裝箱問題。

如果對型別t使用值型別,則編譯器將特別針對該值型別生成list類的實現。這意味著不必對list物件的列表元素進行裝箱就可以使用該元素,並且在建立大約500個列表元素之後,不對列表元素裝箱所節省的記憶體將大於生成該類實現所使用的記憶體。

雜湊表(hashtable)

一、雜湊表(hashtable)簡述

在.net framework中,hashtable是system.collections命名空間提供的乙個容器,用於處理和表現類似key/value的鍵值對,其中key通常可用來快速查詢,同時key是區分大小寫;

value用於儲存對應於key的值。hashtable中key/value鍵值對均為object型別,所以hashtable可以支援任何型別的key/value鍵值對.

二、雜湊表的簡單操作

在雜湊表中新增乙個key/value鍵值對:hashtableobject.add(key,value);

在雜湊表中去除某個key/value鍵值對:hashtableobject.remove(key);

從雜湊表中移除所有元素:hashtableobject.clear();

判斷雜湊表是否包含特定鍵key:hashtableobject.contains(key);

字典(directonary)

hashtable和dictionary型別

2:多執行緒中推薦使用hashtable,預設hashtable允許單執行緒寫入, 多執行緒讀取對hashtable進一步呼叫synchronized()方法可以獲得完全執行緒安全的型別,而dictionary非執行緒安全,必須人為使用lock語句進行保護, 效率大減。

3:dictionary有按插入順序排列資料的特性(注:但當呼叫remove()刪除過節點後順序被打亂), 因此在需要體現順序的情境中使用dictionary能獲得一定方便。

hashtable應用場合:做物件快取,樹遞迴演算法的替代,和各種需提公升效率的場合。hashtable中的key/value均為object型別,由包含集合元素的儲存桶組成。儲存桶是 hashtable中各元素的虛擬子組,與大多數集合中進行的搜尋和檢索相比,儲存桶可令搜尋和檢索更為便捷。每一儲存桶都與乙個雜湊**關聯,該雜湊**是使用雜湊函式生成的並基於該元素的鍵。hashtable的優點就在於其索引的方式,速度非常快。如果以任意型別鍵值訪問其中元素會快於其他集合,特別是當資料量特別大的時候,效率差別尤其大。

排序列表(sortedlist)

與雜湊表類似,區別在於sortedlist中的key陣列排好序的

名-值集合(namevaluecollection)

namevaluecollection與hashtable很類似,但是他們還是有區別的,hashtable 的key是唯一性,而namevaluecollection則不唯一

堆疊(stack)

表示物件的簡單的後進先出非泛型集合。push方法入棧,pop方法出棧

佇列(queue)

佇列先進先出,enqueue方法入佇列,dequeue方法出佇列

常用集合介面系列:

常用集合類系列:

c 中常用集合類和集合介面之集合類系列

常用集合類 陣列 array 的不足 即 集合與陣列的區別 1.陣列是固定大小的,不能伸縮。雖然system.array.resize這個泛型方法可以重置陣列大小,但是該方法是重新建立新設定大小的陣列,用的是舊陣列的元素初始化。隨後以前的陣列就廢棄!而集合卻是可變長的。2.陣列要宣告元素的型別,集合...

Java集合中常用的介面和類

上圖是集合框架中常用的類和介面 一 用得最多的主要有set,list,map,iterator這幾個介面,set和list介面都是collection介面的子介面,有很多相同的地方,我們只要撐握了collection介面的方法及set和list的用法也就差不多了.set和list 的區別 1 set...

C 集合介面與集合類

c 開發經常用到.net框架為我們提供的集合介面和集合類,接下來做乙個總結,如有差錯,希望各位大神指正。首先是集合介面,自己畫了一張圖 嘿嘿,有點醜 來說明集合介面的繼承關係。個人覺得,了解集合介面,首先要把握他們的繼承關係。如上圖,所有的集合介面和集合類都繼承 實現ienumerable介面。ie...