【前言】剛開始學習的時候沒有仔細去思考,然後這些內容在我腦海中就沒有什麼 印象,問問自己這些有什麼區別也只能籠統的說出一點兒來,所以學習還是要做到顆 粒歸倉的,及時總結是很重要的呀。
陣列:陣列是相同資料型別的元素按一定順序排列的集合。
優點:陣列在記憶體中是連續儲存的,所以可以快速而且容易的從頭到尾遍歷元素。對於陣列賦值以及修改陣列中的值也是非常簡單的。
缺點:但是陣列有乙個很大的不足就是,在宣告陣列的時候必須宣告指定長度的陣列,所以陣列適合於實現已經確定的資料數量的情況。否則就可能會造成宣告的長度過長導致記憶體空間浪費,過段則造成資料的溢位。而且再兩個資料中間插入資料也是非常麻煩的,需要將插入位置後面的陣列全都移動位置。
為了克服這些缺點,就引出了集合的概念。在
.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...