怎么把泛型集合轉(zhuǎn)換為普通集合 什么叫l(wèi)ist?
什么叫l(wèi)ist?list是一個(gè)編程術(shù)語(yǔ),在編程語(yǔ)言中List是類(lèi)庫(kù)中的一個(gè)類(lèi),可以簡(jiǎn)單視之為雙向連結(jié)串行,以線(xiàn)性列的管理物件集合。list是類(lèi)庫(kù)提供的眾多容器(container)之一,除此之外還有v
什么叫l(wèi)ist?
list是一個(gè)編程術(shù)語(yǔ),在編程語(yǔ)言中List是類(lèi)庫(kù)中的一個(gè)類(lèi),可以簡(jiǎn)單視之為雙向連結(jié)串行,以線(xiàn)性列的管理物件集合。
list是類(lèi)庫(kù)提供的眾多容器(container)之一,除此之外還有vector、set、map等。list以模板實(shí)現(xiàn)(即泛型),可以處理任意型別的變量,包括使用者自定義的資料型態(tài)例如:它可以是一個(gè)放置整數(shù)(int)型態(tài)的list、也可以是放置字串(char或string)型態(tài)的list、或者放置使用者自定類(lèi)別(user-defined class)的list。
integer占幾個(gè)字節(jié)?
int占用4個(gè)內(nèi)存。
integer占用16個(gè)字節(jié)。
int是基本數(shù)據(jù),Integer是包裝類(lèi)。
基本數(shù)據(jù)和包裝類(lèi):
java是面向?qū)ο笳Z(yǔ)言,基本數(shù)據(jù)類(lèi)型并不是一個(gè)具體的類(lèi),用包裝類(lèi)可以更好的提現(xiàn)萬(wàn)物基于對(duì)象這一理念。
集合中的泛型需要基類(lèi)是Object類(lèi)型,所以必須有個(gè)對(duì)象的包裝類(lèi)才能使用。
包裝類(lèi)屬于引用數(shù)據(jù)類(lèi)型,所以它們之間的區(qū)別就是基本數(shù)據(jù)類(lèi)型和引用數(shù)據(jù)類(lèi)型的區(qū)別。反應(yīng)到內(nèi)存中,基本數(shù)據(jù)類(lèi)型的值是存放在棧里面,而包裝類(lèi)的棧存放的是值得地址,值存放在堆內(nèi)存中。
List集合使用泛型與不使用泛型有什么區(qū)別?
泛型其實(shí)還有一個(gè)通俗的名字:參數(shù)化類(lèi)型(使用參數(shù)指明了該傳什么類(lèi)型)。
就是明確指定了運(yùn)行期集合中對(duì)象的類(lèi)型。
如果沒(méi)有泛型,那我一切的對(duì)象直接使用Object和強(qiáng)制類(lèi)型轉(zhuǎn)換就解決了不是嗎?但是這種有個(gè)問(wèn)題,就是會(huì)在運(yùn)行期出現(xiàn)隨處可見(jiàn)的強(qiáng)制類(lèi)型轉(zhuǎn)換異常ClassCastException。
而指定了參數(shù)化類(lèi)型,是不是我們?cè)诰幾g期就進(jìn)行檢查了,傳入List類(lèi)型,List里面只能放入String,你add其他類(lèi)型編譯不會(huì)通過(guò)的,就不要提運(yùn)行期檢查了。
。
。
所以你提泛型搞不懂就理解為參數(shù)化類(lèi)型這個(gè)事就完事了
c#中Dictionary、ArrayList、Hashtable和數(shù)組的區(qū)別是什么?
arraylist和hashtable沒(méi)啥優(yōu)點(diǎn),基本很少用了,微軟在msdn里也不建議使用它們了,取而代之的是支持泛型的list和dictionary,原因就在于它們類(lèi)型不安全。而泛型好處有二:一是減少代碼的重復(fù)性,或者說(shuō)提高了復(fù)用性;二是也是最大好處是減少繁復(fù)的裝箱拆箱操作,提高代碼的效率性以及避免裝箱拆箱過(guò)程中的風(fēng)險(xiǎn)性。
數(shù)組依舊沒(méi)啥優(yōu)勢(shì),可能有人說(shuō)數(shù)組效率高。這話(huà)半對(duì),數(shù)組效率確實(shí)比arraylist這種集合類(lèi)型效率高很多,但跟泛型集合比沒(méi)有明顯的差距,反而是泛型集合更靈活一些。當(dāng)然了,有些地方就是不可變的還是用數(shù)組好一些。