C 基礎之集合 Collection

2021-05-25 06:47:57 字數 1373 閱讀 7534

在c#程式設計中,我們經常會使用到集合,現在有時間,我來做乙個整理。主要包括 arraylist、stack、queue、hashtable、list<>。微軟為什麼要定義這麼多集合類,而不只是去定義乙個?因為每一種集合都只適合於某類問題的解決。下面我們將對這些集合的適用問題上進行討論,說明集合的適用範圍,本篇我們不做**解釋:

arraylist類,使用大小可按需動態增加的陣列。它其實是在內部維護著乙個陣列,在我們例項化乙個arraylist物件的時候,內部的陣列長度是為0,當我們去新增元素的時候,arraylist物件先會去判斷內部的陣列是否還可以新增元素,如果可以新增,則直接新增到陣列的未尾。如果內部陣列的元素己滿,則會新建立乙個陣列,這個陣列的長度是原來陣列的2倍。然後再將元素新增進新陣列!

這樣的機制適合於什麼情況呢?我們首先來說,集合的大小可按需動態增加。這就說明我們在存放不固定個數的物件時可以選用arraylist集合。

stack類,棧,表示物件的簡單的後進先出非泛型集合。push方法入棧,pop方法出棧。學過資料結構,我們就知道,棧在記憶體中的表現形式是乙個先進後出的集合。我們在往棧中壓入元素的時候,只能先取出最後壓入的元素。這樣的集合適合哪種問題的解決呢?我們來舉個簡單的例子:我們在做乙個記事本的時候如果想加入乙個撤消操作的話。我們是不是就可以把每乙個操作都存入在乙個stack集合中。然後在撤消的時候來一步一步的取中棧中元素來做相應的處理呢?

hashtable就相當於乙個容器,用於處理和表現類似key/value的鍵值對,其中key通常可用來快速查詢,同時key是區分大小寫;vlaue用於儲存對應於key的值。每個元素都是乙個儲存在dictionaryentry物件中的鍵值對。鍵不能為空引用,但值可以。當把某個元素新增到hashtable時,將根據鍵的雜湊**將元素放入儲存桶中。該鍵的後續查詢將使用鍵的雜湊**只在乙個特定儲存桶中搜尋,這就大大減少為查詢乙個元素所需的鍵比較的次數。所以說,hashtable比較適合於查詢次數比較多的問題解決。使用hashtable將大大減少比較次數。

hashtable的載入因子確定元素與儲存桶的最大比率。載入因子越小,平均查詢速度越快,但消耗的記憶體也增加。預設的載入因子1.0通常提供速度與大小之間的最佳平衡。當建立hashtable時,也可以指定其他載入因子。

當向hashtable中新增元素時,hashtable的實際載入因子將增加。當實際載入因子達到指定的載入因子時,hashtable中儲存桶的數目自動增加到大於當前hashtable儲存桶兩倍的最小質數。

泛型的具體說明我先不在這裡詳細說明。具體的使用範圍請大家到網上查詢一些資料。如果有什麼問題也可以提出

關於集合的種類還有很多,我就不一一說明。以後有時間再進行新增說明。

C 基礎之 集合 佇列

佇列是其元素以先進先出 fifo 的方式來處理的集合。先放在佇列中 的元素會先讀取。佇列的例子有在機場排的隊 人力資源部中等待處理求職信的佇列 列印佇列中等待處理的列印任務 以迴圈方式等 處理的執行緒。另外,還常常 有元素根據其優先順序來處理的佇列。例如,在機場的佇列中,商務艙乘客的處理要優先於經濟...

python內建模組之collections

namedtuple用來建立一種自定義的tuple物件,並且規定tuple元素的個數。並且用屬性而不是用索引來引用tuple的某個元素。這樣,用namedtuple可以很方便地定義一種資料型別 建立 from collections import namedtuple point namedtupl...

python內建模組之collections(六)

collections是python內建的乙個集合模組,提供了許多有用的集合類。import collections dt o dict collections.ordereddict dt 通用方法 print o dict.keys 返回字典所有的鍵順序列表 print o dict.items...