泛型與非泛型集合類的區別及使用例程

2021-09-24 22:23:02 字數 3172 閱讀 6651

非泛型集合類

泛型集合類

描述arraylist

list

表示具有動態大小的物件陣列

hashtable

dictionary

由鍵值對組成的集合

sortedlist

sortedlist

和字典相似但有排序功能的集合

queue

queue

表示標準的先進先出(fifo)佇列

stack

stack

後進先出(lifo)佇列,提供壓入和彈出功能

泛型與非泛型集合類在概念和功能上各有不同,其中非泛型集合類在取出值時需要進行型別的轉換操作,如果加入值型別會引起裝箱和拆箱的操作,這會帶來巨大的效能額外開銷,如果掌握好泛型陣列之後可以不再需要用非泛型的陣列了,同時帶來型別安全的好處並減少在值型別和引用型別之間的裝箱和拆箱。

下面做乙個例程來演示一下

先做乙個學生類:

public class student

public string name

public bool ***

public student(int _number, string _name, bool _***)

public override string tostring()

,姓名:,性別:",

number.tostring(), name, *** ? "男" : "女");

}}

一、arraylist與list示例

arraylist與list示例

arraylist arraystudents = new arraylist();

listliststudnets = new list();

private void button_click(object sender, routedeventargs e)

private void adddata0()

private void showexemple0()

foreach (var item in liststudnets)

}

**中arraylist接收的值包括類和字串,所以要有不同的強制轉換,雖然正常執行,但這樣帶來了安全隱患,泛型集合不需要轉換可以輕鬆呼叫學生類中自定義的.tostring()

二、hashtable與dictionary示例

hashtable與dictionary示例

private void button1_click(object sender, routedeventargs e)

hashtable hashsudents = new hashtable();

dictionarydictstudents = new dictionary();

private void adddata1()

private void showexemple1()

foreach (keyvaluepairitem in dictstudents)

}

1)hashtable不僅需要強制轉換,由於它內部的特殊性,所得到的結果跟原序中的結果順序是不一致的,在需要排序的時候會很麻煩,但dictionary不僅不需要強制轉換,而且順序跟原序是一致的。

2)hashtable和dictionary都仍具有.containskey("序號2");(檢查是否包含某鍵值的項)的方法效率很高。

三、sortedlist與sortedlist示例

sortedlist與sortedlist示例

sortedlist sortliststudents = new sortedlist();

sortedlistsortstudents = new sortedlist();

private void button2_click(object sender, routedeventargs e)

private void adddata2()

private void showexemple2()

foreach (keyvaluepair item in sortstudents )

}

在這個例程中,兩個集合類工作都很好的實現了排序功能,差別仍是乙個有強制轉換,乙個不需要。

四、queue與queue示例(先進先出)

queue與queue示例(先進先出)

queue queuestuds = new queue();

queue queuestudents=new queue();//先進先出

private void button3_click(object sender, routedeventargs e)

private void adddata3()

private void showexemple3()

while (queuestudents.count > 0)

}

queue與queue都使用enqueue()方法將乙個物件加入到佇列中,按照先進先出的法則,入棧後使用dequeue()方法出隊。出隊後該成員被移除,區別仍是強制轉換的問題。

五、stack與stack示例(先進後出,注意顯示資料的順序)

stack與stack示例(先進後出,注意顯示資料的順序)

stack stackstudnets1 = new stack();

stackstackstudents2 = new stack();

private void button4_click(object sender, routedeventargs e)

private void adddata4()

private void showexemple4()

while (stackstudnets1.count > 0)

while (stackstudents2.count > 0)

}

集合類,用在撤銷操作是最方便不過的了,專門記錄使用者的操作,當需要撤銷時,後進的是先出,物件所在位置都不需要判斷,如果是泛型直接用即可,如果是非泛型轉換一下。

注意,第一部分全是最後一次加入的成員,因為用的是peek ()方法:返回不移除成員,永遠返回最後乙個加入的成員;如果用.pop()方法就不同了:返回並移除,

泛型集合,非泛型集合

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

C 泛型與非泛型集合類的區別與使用詳解

一.泛型與非泛型集合類在c 程式中是乙個非常重要的基礎概念,這裡列乙個表來進行對比 非泛型集合類 泛型集合類 描述arraylist list 表示具有動態大小的物件陣列 hashtable dictionary 由鍵值對組成的集合 sortedlist sortedlist 和字典相似但有排序功能...

C 泛型類的集合和非泛型類的集合區別

using system.collections 非泛型類集合的命名空間。非泛型類的集合 不固定資料型別 using system.collections.generic 泛型類集合的命名空間。1 非泛型類的集合和泛型類的集合的區別 前者是不固定資料型別 後者固定資料型別 比如非泛型集合的array...