陣列 集合 泛型集合的區別

2021-09-29 03:21:23 字數 2682 閱讀 7892

首先咱們把這4個物件都宣告並例項化一下:

//陣列

string m_str = new string[5];

//集合

arraylist m_alist = new arraylist();

//泛型集合

listm_list = new list();

//字典

dictionarym_dt = new dictionary();

大家看看這4個物件放在一起從外觀上有什麼異同?

我給大家提個醒,看看他們是不是都有new關鍵字,也就是說他們都需要例項化,在說明白點他們都是引用型別(不知道引用型別為何物的也不用特別糾結,以後會專門說說這個區別)。

好了咱們繼續看

宣告陣列時裡面有乙個數字「5」,對了這就是區別,陣列在宣告的時候必須要指定長度。這是因為陣列在記憶體中是連續儲存的,所以它的索引速度非常快,而且賦值與修改元素也很簡單。還有一點就是陣列在宣告定義的時候就指定了型別,我們定義的陣列的型別是string的,而且因為陣列是連續的,這就導致我們想在這個陣列的第乙個元素和第二個元素之間插隊,插進乙個成員是很不方便的。這就導致了我們需要乙個資料集合,這個集合可以方便的讓我們對該集合的成員進行add/delete/insert的操作.這就出現了集合(arraylist)。

//陣列

string m_str = new string[5];

m_str[0] = "a";

m_str[1] = "a";

m_str[2] = "a";

咱們看第2個物件集合(arraylist),它在宣告的時候既沒有大小,也沒有型別,這說明啥?說明他的大小是動態的你可以隨意的add/delete/insert 如:

//集合

arraylist m_alist = new arraylist();

m_alist.add("a");

m_alist.add(10);

m_alist.add(true);

m_alist.removeat(0);

m_alist.insert(1, "aa");

大家可能注意到集合arraylist中add的成員有字串、數值、布林值。這就說明了乙個問題,集合中的每乙個成員都是object型別的,它把具體的成員裝箱到object中在加入到自己。如果要是使用集合中的成員,因為成員是object型別的,所以也要拆箱到具體的型別中後再進行操作和使用。這樣就會出現問題:1、消耗效能(頻繁的拆箱和裝箱)2、不安全,比如說上面的集合物件的第乙個成員是字元型的,你取出來後和乙個數值型的變數進行運算,就會報錯……。那麼接下來就又出現了乙個物件——泛型集合(list)物件。

泛型集合list物件,大家可能一看見這個就蒙了,反正我一開始看見是蒙了,尖括號是啥,t是啥?別慌,其實不難,尖括號就是一種語法,至於t可以理解成佔位符,它可以是string、int、bool……等。咱們看看**的用法:

//泛型集合

listm_list = new list();

m_list.add(10);

m_list.add(10);

m_list.add(10);

m_list.removeat(0);

m_list.insert(1,12);

看起來好像和集合(arraylist)的用法差不多,其實就是差不多了,哈哈。唯一的區別在於在宣告泛型集合(list)的時候需要制定裡面成員的型別,上面的反省集合我們制定的型別是int的,這就是說你新增的成員必須也是int的,這會有啥好處?1.資料安全了,你新增string等非int型別的成員新增不進去(編譯都過不去),這樣資料就安全唯一了,2.節省的效能,不需要每一操作成員的時候都要拆箱和裝箱了。

泛型集合相比集合就相對完美了……

泛型集合list(c#)-注意事項

使用前必須例項化

可以單純例項化、也可以例項化時使用「集合初始化器」初始化。

常用方法

新增元素:add()、insert()

刪除元素:removeat(索引)、remove(物件)、clear()

常用屬性

獲取元素個數:count(對比陣列 :length)

集合遍歷

使用for迴圈、也可以使用foreach迴圈。

陣列與集合的區別:

一:陣列宣告了它容納的元素的型別,而集合不宣告。這是由於集合以object形式來儲存它們的元素。

二:乙個陣列例項具有固定的大小,不能伸縮。集合則可根據需要動態改變大小。

三:陣列是一種可讀/可寫資料結構沒有辦法建立乙個唯讀陣列。然而可以使用集合提供的readonly方 唯讀方式來使用集合。該方法將返回乙個集合的唯讀版本。

泛型與集合的區別

泛型聽起來很高深的乙個詞,但實際上它的作用很簡單,就是提高c#程式的效能。

比如在計算機中經常用到一些資料結構,如佇列,鍊錶等,而其中的元素以前一般這麼定義:object a=new object();

這樣就帶來乙個嚴重的問題,用object來表示元素沒有邏輯問題,但每次拆箱、封箱就占用了大量的計算機資源,導致程式效能低下,而這部分內容恰恰一般都是程式的核心部分,如果使用object,那麼程式的表現就比較糟糕。

而使用泛型則很好的解決這個問題,本質就是在編譯階段就告訴編譯器,資料結構中元素的種類,既然編譯器知道了元素的種類,自然就避免了拆箱、封箱的操作,從而顯著提高c#程式的效能。

比如list就直接使用string物件作為list的元素,而避免使用object物件帶來的封箱、拆箱操作,從而提高程式效能。

陣列,集合,泛型

從陣列到泛型的演變 在資料結構中,陣列只能順序儲存,可以很容易地讀取元素插入刪除資料 陣列 1.限制長度 2.陣列中元素型別必須一致 集合 arraylist 集合 collections 命名空間是system命名空間的一部分,system.collections命名空間提供了幾個類來滿足不同的需...

泛型集合,非泛型集合

arraylist 非泛型集合 list 泛型集合 集合跟陣列比較我們更容易理解。陣列 1,長度固定2,資料型別預先宣告 集合 1,長度可變2,資料型別預先宣告的為泛型集合,資料型別不限定為非泛型 arraylist 長度不固定,元素資料型別為object的集合。object類之間或間接為所有類的父...

C 陣列,集合,泛型

animal arrayanimal new animal 3 arrayanimal 0 new cat 嘻嘻 arrayanimal 1 new cat 哈哈 arrayanimal 2 new cat 嘿嘿 優點 在記憶體中連續儲存。缺點 建立時必須指定陣列變數大小,兩個元素之間新增元素比較困...