C 集合的應用以及和陣列比較,它的好處有哪些

2022-09-15 05:12:09 字數 3298 閱讀 3874

我們用的比較多的非泛型集合類主要有 arraylist類 和 hashtable類。我們經常用hashtable 來儲存將要寫入到資料庫或者返回的資訊,在這之間要不斷的進行型別的轉化,增加了系統裝箱和拆箱的負擔,如果我們操縱的資料型別相對確定的化

用dictionary集合類來儲存資料就方便多了,例如我們需要在電子商務**中儲存使用者的購物車資訊(商品名,對應的商品個數)時,完全可以用 dictionary來儲存購物車資訊,而不需要任何的型別轉化。 

1.陣列是固定大小的,不能伸縮。雖然system.array.resize這個泛型方法可以重置陣列大小, 

但是該方法是重新建立新設定大小的陣列,用的是舊陣列的元素初始化。隨後以前的陣列就廢棄!而集合卻是可變長的 

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

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

4.陣列要有整數下標才能訪問特定的元素,然而很多時候這樣的下標並不是很有用。集合也是資料列表卻不使用下標訪問。 

很多時候集合有定製的下標型別,對於佇列和棧根本就不支援下標訪問! 

1.陣列

int intarray1;

//初始化已宣告的一維陣列 

intarray1 = new int[3];

intarray1 = new int[3];

intarray1 = new int;

2.

陣列:同一型別,固定長度

集合:不同型別,不固定長度

要使用集合,必須先引用命名空間:

using system.collections;

定義:arraylist arr = new arraylist();

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

方法 1:add()向集合中新增乙個元素, 

2:remove()刪除集合中的乙個元素 

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

4:reverse()反轉集合的元素 

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

6:clone()複製乙個集合

3.list

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

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

4.dictionary

表示鍵和值的集合。dictionary遍歷輸出的順序,就是加入的順序,這點與hashtable不同 

5.sortedlist

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

6.hashtable類 

雜湊表,名-值對。類似於字典(比陣列更強大)。雜湊表是經過優化的,訪問下標的物件先雜湊過。如果以任意型別鍵值訪問其中元素會快於其他集合。 

gethashcode()方法返回乙個int型資料,使用這個鍵的值生成該int型資料。雜湊表獲取這個值最後返回乙個索引,表示帶有給定雜湊的資料項在字典中儲存的位置。 

hashtable 和 dictionary 型別 

1:單執行緒程式中推薦使用 dictionary, 有泛型優勢, 且讀取速度較快, 容量利用更充分.

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

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

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

hashtable的應用場合有:做物件快取,樹遞迴演算法的替代,和各種需提公升效率的場合

dictionary和hashtable內部實現差不多,但前者無需裝箱拆箱操作,效率略高一點。

hashtable是經過優化的,訪問下標的物件先雜湊過,所以內部是無序雜湊的,保證了高效率,也就是說,其輸出不是按照開始加入的順序,而dictionary遍歷輸出的順序,就是加入的順序,這點與hashtable不同。如果一定要排序hashtable輸出,只能自己實現:

6. stack類

棧,後進先出。push方法入棧,pop方法出棧。

7.queue類

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

集合和陣列的比較

陣列容量固定且無法動態改變,集合是容量動態改變 陣列存放的資料 是基本資料型別和飲用水資料型別,集合只能放引用資料型別 陣列無法判斷其中存有多少元素,length只能告訴陣列的容量,集合可以判讀其中存有多少元素,而對總的容量是不關係的 集合有多中資料結構有順序表 鍊錶 雜湊表 樹等 多種特徵可以不同...

c 的vector array和陣列的比較

在c 11中,stl中提拱了乙個新的容器std array,該容器在某些程度上替代了之前版本的std vector的使用,更可以替代之前的自建陣列的使用。那針對這三種不同的使用方式,先簡單的做個比較 相同點 1.三者均可以使用下表運算子對元素進行操作,即vector和array都針對下標運算子進行了...

C vector array和陣列的比較

在c 11中,stl中提拱了乙個新的容器std array,該容器在某些程度上替代了之前版本的std vector的使用,更可以替代之前的自建陣列的使用。那針對這三種不同的使用方式,先簡單的做個比較 相同點 三者均可以使用下表運算子對元素進行操作,即vector和array都針對下標運算子進行了過載...