C 陣列,集合,泛型

2021-07-27 14:59:04 字數 2166 閱讀 6170

animal arrayanimal = new animal[3];

arrayanimal[0] = new cat("嘻嘻");

arrayanimal[1] = new cat("哈哈");

arrayanimal[2] = new cat("嘿嘿");

優點:在記憶體中連續儲存。

缺點:建立時必須指定陣列變數大小,兩個元素之間新增元素比較困難。

.net framwork提供了用於資料儲存和檢索的專用類,這些類統稱為集合。大多數集合類實現相同的介面。arraylist是其中常用的一種。引用system.collection命名空間,它是使用大小可按需動態增加的陣列實現ilist介面。arraylist的容量是arraylist可以儲存的元素數,arraylist的預設初始容量是0。隨著元素新增到arraylist中,容量會根據需要通過重新分配自動增加。使用整數索引可以訪問此集合中的元素。此集合中的索引從零開始。

ilist arrayanimal = new arraylist();

arrayanimal.add(new cat("嘻嘻")); //呼叫集合的add方法增加物件,其引數是object

arrayanimal.add(new cat("哈哈"));

arrayanimal.add(new cat("嘿嘿"));

foreach (animal item in arrayanimal) //遍歷這個陣列,讓它們都shout()

arrayanimal.removeat(1);

arrayanimal.removeat(1); //呼叫集合的removeat方法移除第2個和第3個物件

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

arraylist缺點:它不是型別安全的。arraylist不管你是什麼物件都是接受的,因為在它眼裡所有的元素都是object。如果你寫arrayanimal.add(123);編譯時沒問題,執行到foreach(animal item in arrayanimal)就會報錯。另外arraylist存放int、string、struct資料的時候,還存在乙個裝箱、拆箱的問題,值型別與引用型別發生轉換,值轉引用叫裝箱;引用轉值稱拆箱;兩種型別的記憶體處理機制是不同的,因此不能直接拿來用。即:使用arraylist就意味著都需要將值型別裝箱為object物件;使用集合元素的時候,還需要執行拆箱操作,從物件中提取值型別。裝箱和拆箱會帶來很大的效能損耗。

//裝箱,把值型別打包到object引用型別的乙個例項中

int i = 123;

object o = (object) i; //整型變數i被裝箱並賦值給物件o

//拆箱,從物件中提取值型別

o = 123;

i = (int) o; //物件o拆箱並將其賦值給整型變數i

相對於簡單的賦值而言,裝箱和拆箱過程需要進行大量的計算。對值型別進行裝箱時,必須分配並構造乙個全新的物件。其次,拆箱所需的強制轉換也需要進行大量的計算。

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

使用時,需要引用命名空間system.collection.generic,該類使用大小可按需動態增加的陣列實現ilist泛型介面。用法上就是在ilist和list後面加」《資料型別》」,其中<>裡面就是你需要指定的集合的資料或物件型別。解決了arraylist型別不安全的問題。

ilistarrayanimal = new

list

(); //ilist表示此集合變數只能接受animal型別

arrayanimal.add(new cat("嘻嘻"));

arrayanimal.add(new cat("哈哈"));

arrayanimal.add(new cat("嘿嘿"));

通常情況下,都建議使用泛型集合,型別安全,對於值型別元素不必進行裝箱。

陣列,集合,泛型

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

C 集合 泛型集合

非泛型集合的類和介面位於system.collections命名空間。泛型集合的類和介面位於system.collections.generic命名空間。普通集合 arraylist 值 有序不唯一 hashtable key 必須唯一 可為空 不能為null value 可重複 能為空和null ...

C 泛型 泛型集合Dictionary

在system.collections.generic命名空間中,與arraylist相對應的泛型集合是list,與hashtable相對應的泛型集合是dictionary,其儲存資料的方式與雜湊表相似,通過鍵 值來儲存元素,並具有泛型的全部特徵,編譯時檢查型別約束,讀取時無須型別轉換。本儲存的例子...