首先咱們把這4個物件都宣告並例項化一下:
//陣列大家看看這4個物件放在一起從外觀上有什麼異同?string m_str = new string[5];
//集合
arraylist m_alist = new arraylist();
//泛型集合
listm_list = new list();
//字典
dictionarym_dt = new dictionary();
我給大家提個醒,看看他們是不是都有new關鍵字,也就是說他們都需要例項化,在說明白點他們都是引用型別(不知道引用型別為何物的也不用特別糾結,以後會專門說說這個區別)。
好了咱們繼續看
宣告陣列時裡面有乙個數字「5」,對了這就是區別,陣列在宣告的時候必須要指定長度。這是因為陣列在記憶體中是連續儲存的,所以它的索引速度非常快,而且賦值與修改元素也很簡單。還有一點就是陣列在宣告定義的時候就指定了型別,我們定義的陣列的型別是string的,而且因為陣列是連續的,這就導致我們想在這個陣列的第乙個元素和第二個元素之間插隊,插進乙個成員是很不方便的。這就導致了我們需要乙個資料集合,這個集合可以方便的讓我們對該集合的成員進行add/delete/insert的操作.這就出現了集合(arraylist)。
//陣列咱們看第2個物件集合(arraylist),它在宣告的時候既沒有大小,也沒有型別,這說明啥?說明他的大小是動態的你可以隨意的add/delete/insert 如:string m_str = new string[5];
m_str[0] = "a";
m_str[1] = "a";
m_str[2] = "a";
//集合大家可能注意到集合arraylist中add的成員有字串、數值、布林值。這就說明了乙個問題,集合中的每乙個成員都是object型別的,它把具體的成員裝箱到object中在加入到自己。如果要是使用集合中的成員,因為成員是object型別的,所以也要拆箱到具體的型別中後再進行操作和使用。這樣就會出現問題:1、消耗效能(頻繁的拆箱和裝箱)2、不安全,比如說上面的集合物件的第乙個成員是字元型的,你取出來後和乙個數值型的變數進行運算,就會報錯……。那麼接下來就又出現了乙個物件——泛型集合(list)物件。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");
泛型集合list物件,大家可能一看見這個就蒙了,反正我一開始看見是蒙了,尖括號是啥,t是啥?別慌,其實不難,尖括號就是一種語法,至於t可以理解成佔位符,它可以是string、int、bool……等。咱們看看**的用法:
//泛型集合看起來好像和集合(arraylist)的用法差不多,其實就是差不多了,哈哈。唯一的區別在於在宣告泛型集合(list)的時候需要制定裡面成員的型別,上面的反省集合我們制定的型別是int的,這就是說你新增的成員必須也是int的,這會有啥好處?1.資料安全了,你新增string等非int型別的成員新增不進去(編譯都過不去),這樣資料就安全唯一了,2.節省的效能,不需要每一操作成員的時候都要拆箱和裝箱了。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);
泛型集合相比集合就相對完美了……
泛型集合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 嘿嘿 優點 在記憶體中連續儲存。缺點 建立時必須指定陣列變數大小,兩個元素之間新增元素比較困...