C#--數組和集合

C#在存儲數據的時候,是需要先聲明一個數組的,當然還可以使用集合。那麼數組與集合有什麼區別,爲什麼有了數組還需要集合呢?

一、數組:

定義:數組是相同數據類型的元素按一定順序排列的集合。

優點:數組在存儲數據的時候是連續存儲的,因此可以快速而容易地從頭到尾遍歷元素,可以快速的修改元素等等。

缺點:在聲明數組的時候必須先聲明指定的長度。如果事先不知道存儲的大小,很容易會造成聲明的長度過長導致內存空間浪費,過短則造成數據的溢出。而且在兩個數據中間插入數據也是非常麻煩的,需要將插入位置後面的數組全部移動位置。

二、集合:

定義:ArrayList是命名空間System.Collections下的一部分,它是使用大小可按需動態增加的數組實現IList接口。ArrayList的默認初始容量爲0,隨着元素添加到ArrayList中,容量會根據需要通過重新分配自動增加。

優點:ArrayList 可以根據使用大小按需動態增加,不用事先設置大小,可以隨意的添加數據,插入或移除某一範圍元素也比較方便。

缺點:因爲ArrayList 插入值的類型都是當做Object 類型插入的,所以當調用數據的時候可能會出現類型不匹配的錯誤。

三、總結:

(1)數組是一種非常有用的數據結構,但是數組也具有很多的侷限性:首先,數組元素的數據類型必須是相同的,其次,在創建數組時必須確定元素個數數組一旦創建,其大小就是固定的。想調整其大小或者增加新的元素都是比較困難的。特別是,當對象的個數未知,並且隨時可能要循環、添加和移除時,數組會很不方便。

(2)集合是通過高度結構化的方式存儲任意對象的類,它可以把一組類似的對象組合在一起。與無法動態調整大小的數組相比,集合不僅能隨意調整大小,而且爲存儲或檢索某個對象提供了更多的方法。例如,由於Object是所有數據類型的基類,因此任何類型的對象(包括任何值類型或引用類型數據)都可被組合到一個Object類型的集合中,並通過C#的foreach語句來訪問來訪問其中的每一個對象。當然,對於一個Object類型的集合來說,可能需要單獨對個元素執行附加的處理,例如,裝箱、拆箱或轉換等。

另外:

1、數組:同一類型,固定長度;集合:不同類型,不固定長度。

2、要使用集合,必須先引用命名空間:using System.Collections;

3、集合的一些方法:

Add()向集合中添加一個元素;

Remove()刪除集合中的一個元素 ;

RemoveAt(int i)刪除集合中索引值爲i的元素 ;

Reverse()反轉集合的元素 ;

Sort()以從小到大的順序排列集合的元素 ;

Clone()複製一個集合。

4、Hashtable:哈希表,碼-值對(key-value),類似於字典(比數組更強大)。哈希表是經過優化的,訪問下標的對象先散列過。如果以任意類型鍵值訪問其中元素會快於其他集合。GetHashCode()方法返回一個int型數據,使用這個鍵的值生成該int型數據。哈希表獲取這個值最後返回一個索引,表示帶有給定散列的數據項在字典中存儲的位置。

5、單線程程序中推薦使用 Dictionary, 有泛型優勢, 且讀取速度較快, 容量利用更充分。多線程程序中推薦使用 Hashtable,默認的Hashtable允許單線程寫入,多線程讀取,對 Hashtable 進一步調用 Synchronized() 方法可以獲得完全線程安全的類型。而 Dictionary 非線程安全,必須人爲使用 lock 語句進行保護,效率大減。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章