泛型和非泛型

2021-07-03 05:09:13 字數 1040 閱讀 6075

原帖: 

泛型和非泛型

一:區別

1 : 非泛型類容器來說,該容器的元素型別是 object ,使用方便,無須指定具體的元素型別。但是這種使用上的方便帶來了慘重的效能上的損失,因為,我們每次插入乙個元素就要經過一次 「 裝箱 」 操作,每次訪問乙個元素就要經過一次 「 拆箱 」 操作。

arraylist , hashtable , queue , stack , sortedlist , collectionbase , readonlycollectionbase 。

2 : 「 泛型 」 容器就不一樣了,這種型別的容器和 c++ 裡的容器 ( 比如 vector 、 map 、 list 等 ) 一樣,在使用的時候都要指定元素型別,並且在 「 編譯階段 」 完成型別制定,而且也避免了 「 裝箱、拆箱、型別轉換 」 等無謂的效能損失。  

list , dictonary , queue , stack , sortedlist , collection , readonlycollection 。

二:如何選擇集合類

1 : fifo : queue 。 lifo : stack 。

2 :按索引訪問: arraylist , list 。

3 :按索引鍵訪問: hashtable , sortedlist , dictonary 。 hashtable 對於大量資料如幾萬,幾十萬時,資料搜尋效率高。 sortedlist 一般用在幾百,幾千條資料時用。

三:sortedlist鍵值允許重複

struct sortedlistvalue

public int a;

public int b;

}class mycomparer : icomparer

return a.compareto(b);

}#endregion

}class program

static void displayresult(sortedlist sl)

,鍵值為:", de.key, ((sortedlistvalue)(de.value)).a);}}

}}

泛型集合,非泛型集合

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

泛型 泛型簡介和泛型類

在泛型引入之前,如果我們需要產生多個物件,每個物件的邏輯完全一樣,只是物件內的成員變數的型別不同,那麼我們只能建立多個類檔案,給每個類的成員變數設定不同的資料型別。這麼做會導致類的膨脹,重用性太差。一種方式是對將object作為變數型別,但是需要對獲取的資料進行強制型別轉換,這個過程可能導致型別轉換...

泛型List與非泛型ArrayList

arraylist集合的用處越來越窄了,list static void main string args arraylist的不安全性一目了然,型別不安全,必將導致各種攻擊的產生,static void main string args 相比不安全的arraylist來說,list 的型別安全性使...