更新時(shí)間:2019-12-13 11:54:47 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2816次
System.Collections.Generic命名空間包含了范型集合需要的類和接口;
我們?cè)趯懗绦虻臅r(shí)候, 經(jīng)常需要這種東西: 可變長(zhǎng)度的Array, 比如說(shuō)一個(gè)string[]
而事實(shí)上定義了一個(gè)string[]并初始化后那么它的長(zhǎng)度就固定了, Array根本做不到. 如果非要實(shí)現(xiàn)這種功能,那唯一合理的辦法只有定義一個(gè)ArrayList, 這個(gè)類似于vector類型的東西可以實(shí)現(xiàn)可變長(zhǎng)度的Array, 但是帶來(lái)幾個(gè)問(wèn)題:
1. ArrayList里面操作的都是object類型, 這意味著如果我放一個(gè)string進(jìn)去, 再當(dāng)作int取出來(lái), 這在編譯階段是不會(huì)出錯(cuò)的, 而在運(yùn)行時(shí)才會(huì)提示轉(zhuǎn)換無(wú)效
2. 以object方式存儲(chǔ)時(shí), 需要裝箱和拆箱操作, 這些步驟會(huì)帶來(lái)額外的性能消耗 - 而沒(méi)法做到普通Array那樣直接
3. 如果要避免前兩個(gè)問(wèn)題, 那么所有的需要強(qiáng)類型的集合類都需要分別定義, 比如XxxxCollection, 非常麻煩
解決辦法:
Collection strCollection = new Collection();
strCollection.Add("a");strCollection.Add("b");.....
這樣strCollection就是我們需要的集合. 范型使Add/Remove等操作全部都是類型安全的,以索引器訪問(wèn)時(shí)也是類型安全的, 這在編譯階段(對(duì)于VS來(lái)說(shuō)可以包括編寫代碼的階段)就可以反映出來(lái).
而性能方面, 這里根本就沒(méi)有裝箱/拆箱的操作, 所以比原有ArrayList方式性能更高. 也沒(méi)有像以前那樣聲明一個(gè)StringCollection之類的class, 代碼上也簡(jiǎn)潔的多.
范型的特點(diǎn)
增加了編譯時(shí)的類型檢查;
減少了裝箱和拆箱操作;
減少了運(yùn)行時(shí)的類型檢查;
Cast;
以上就是動(dòng)力節(jié)點(diǎn)Java培訓(xùn)機(jī)構(gòu)小編介紹的“Java培訓(xùn)教程:什么是泛型Java”的內(nèi)容,希望對(duì)大家有幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。
相關(guān)文章
零基礎(chǔ)怎么自學(xué)Java,完整版Java學(xué)習(xí)路線圖
你還在糾結(jié)學(xué)Java,是自學(xué)還是去培訓(xùn)班嗎
一個(gè)標(biāo)準(zhǔn)的Java程序員如何進(jìn)階?
Java學(xué)習(xí)路線清單,快速進(jìn)階Java
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)