C 中集合與陣列的區別

2021-07-30 06:59:54 字數 2391 閱讀 3174

【前言】剛開始學習的時候沒有仔細去思考,然後這些內容在我腦海中就沒有什麼    印象,問問自己這些有什麼區別也只能籠統的說出一點兒來,所以學習還是要做到顆    粒歸倉的,及時總結是很重要的呀。

陣列:陣列是相同資料型別的元素按一定順序排列的集合。

優點:陣列在記憶體中是連續儲存的,所以可以快速而且容易的從頭到尾遍歷元素。對於陣列賦值以及修改陣列中的值也是非常簡單的。

缺點:但是陣列有乙個很大的不足就是,在宣告陣列的時候必須宣告指定長度的陣列,所以陣列適合於實現已經確定的資料數量的情況。否則就可能會造成宣告的長度過長導致記憶體空間浪費,過段則造成資料的溢位。而且再兩個資料中間插入資料也是非常麻煩的,需要將插入位置後面的陣列全都移動位置。

為了克服這些缺點,就引出了集合的概念。在

.net framework

中提供了用於資料儲存和檢索的專用類,這些類統稱為集合。

1.arraylist它是使用大小可按需動態增加的陣列實現

ilist

介面(定義了很多集合使用的方法)。所以

arraylist

的初始容量為

0,隨著元素新增進來,容量就會根據需要重新分配。

優點:arraylist

可以根據使用大小按需動態增加,不用事先設定其大小的控制,還可以隨意地新增、插入或移除某一範圍元素,比陣列要方便。

缺點:但是

arraylist

不是型別安全的,它把插入值型別的資料都當做

object

型別,當呼叫資料的時候就可能會出現型別不匹配的錯誤。所以

arraylist

存放值型別的資料時就需要進行裝箱拆箱的操作,但是這項操作需要進行大量的計算也就帶來了很大的效能損耗。

using system.collections;//增加命名空間

public partial class form1:form

裝箱:把值型別打包到

object

引用型別的乙個例項中。

//整型變數i被裝箱並複製給物件o

int i=123;

object o=(object) i;

拆箱:從物件中提取值型別。

//物件o拆箱並將其賦值給整型變數i

o=123;

i=(int)o;

由於arraylist

存在的問題,c#在

2.0版之後退出了新的技術來解決這些問題——泛型。

2.list

:泛型是具有佔位符(型別引數)的類、結構、介面和方法,這些佔位符是類、結構、介面和方法所儲存或使用的乙個或多個型別的佔位符。泛型集合類可以將型別引數用作他所儲存的物件的佔位符;型別引數作為其字段的型別和其方法的引數型別出現。

說白了就是在

ilist

和list

後面新增了,t

就是需要指定的集合的資料或物件型別。

using system.collections.generic;//增加命名空間

public partial class form1:form

3.hashtable

是一種資料結構,通過鍵(

key)和值

(value)

來組織的。訪問

hashtable

元素是可以通過鍵名來獲取具體值,但是由於值型別也被轉化為

object

型別,所以得到乙個值型別時也需要轉化,進行拆箱裝箱操作。

4.泛型集合(

dictionary

)具有泛型的全部特性,儲存資料的方式和

hashtable

類似,通過鍵和值儲存元素的。它在編譯時需要檢查型別的約束,獲取元素是無需型別轉換,所以在讀取值型別資料的時候就不需要進行裝箱、拆箱的操作。

【總結】對於上述的陣列和集合各有優劣,可以按照實際情況選擇合適的應用,但是在實際應用中還是泛型使用的比較廣泛,對於泛型的了解只是乙個皮毛,需要在以後的應用過程中再去探索它的奧秘。

Java中集合和陣列的區別

區別 1 陣列大小固定,儲存資料型別單一 基本型別 引用型別 2 集合大小可動態擴充套件,可儲存各種型別的資料 聯絡 1 陣列轉集合 arrays.aslist 陣列 intarr arrays.aslist arr for inti 0 isystem.out.println arr i 2 集合...

C 陣列與集合的區別

一下,菜鳥學習第一步 what 陣列,是有序的元素序列。若將有限個型別相同的變數的集合命名,那麼這個名稱為陣列名。組成陣列的各個變數稱為陣列的分量,也稱為陣列的元素,有時也稱為下標變數。用於區分陣列的各個元素的數字編號稱為下標。陣列是在程式設計中,為了處理方便,把具有相同型別的若干元素按無序的形式組...

java中集合與陣列之間的轉化

一 集合轉化為陣列 採用集合.toarray 方法,根據轉化為陣列的型別又可以分為 1 轉化為object型別陣列 比如 object listarray list.toarray object setarray set.toarray 2 轉化為具體型別陣列 比如 string listarray...