Java - 泛型的理解

做CS61B的homework6,碰到了一個(gè)問題,本來想忽視,問了之后才發(fā)現(xiàn)是大問題。
前提:
我現(xiàn)在要構(gòu)造一個(gè)size = 100 的哈希表,里面裝LinkedList, 然后每個(gè)鏈表用來裝發(fā)生沖突的,Key相等的類 Entry。

hashTable = new LinkedList<Entry>[sizeEstimate];
是錯(cuò)的。但是如果寫,
hashTable = (LinkedList<Entry>[])new LinkedList[sizeEstimate];
這么寫就對(duì)了。
其中就涉及到 泛型的問題。之前也或多或少碰到過。剛剛仔細(xì)查了下,有些收獲,總體而言,如下。
Java中的數(shù)組必須知道它所持有的確切類型。
然而,對(duì)于一個(gè)泛型,程序無法獲得它的具體的參數(shù)類型。
即,**數(shù)組是具體化的(reified),而泛型在運(yùn)行時(shí)是被擦除的(erasure)。這句話的意思是數(shù)組是在運(yùn)行時(shí)才去判斷數(shù)組元素的類型約束,而泛型正好相反,在運(yùn)行時(shí),泛型的類型信息是會(huì)被擦除的,只有編譯的時(shí)候才會(huì)對(duì)類型進(jìn)行強(qiáng)化。 **
所以數(shù)組和泛型是水火不容的。
那么這個(gè)問題有什么解決方法。
方法一就是用 Cast,如我上所說。但也有不好的地方。強(qiáng)制轉(zhuǎn)換對(duì)程序影響不好。具體哪里不好我也不懂,那老頭這么說的。那就這么說吧。
方法二:用ArrayList 來解決問題。
先說下,ArrayList。目前我的理解。
他是一個(gè)List,實(shí)現(xiàn)了List的接口,但同時(shí),他又擁有一些Array的特點(diǎn)。
比如,

ArrayList a = new ArrayList<LinkedList<Entry>>();
for (int i = 0; i < 100; i++)
        a.add(new LinkedList<Entry>());

就等效于:

hashTable = new LinkedList<Entry>[100]; //ILLEGAL??!違法的 

然后,需要在哈希值87處插入元素時(shí),就:

(a.get(87)).add(new Entry());

然后,這個(gè)的復(fù)雜度只有O(1).也就是,基本實(shí)現(xiàn)了數(shù)組的特征,可以常數(shù)時(shí)間內(nèi)快速定位。實(shí)現(xiàn)操作。而且,這個(gè)ArrayList 可以動(dòng)態(tài)改變大小。畢竟本質(zhì)是List.
但同時(shí),他又擁有List的屬性,比如, remove(), 等,都是線性的。
有時(shí)間可以好好研究下源碼。

要做的好多啊。。
最推薦的泛型的一個(gè)文章。
http://zddava.iteye.com/blog/352850

下面幾個(gè)也都還不錯(cuò)。
http://m.blog.csdn.net/blog/bhq2010/12653797
http://www.ibm.com/developerworks/cn/java/j-jtp01255.html
http://blog.csdn.net/eric_sunah/article/details/7262486

**
總結(jié):
Java泛型, ArrayList
**

今天妹子就要考托福了。希望她可以上92.
Anyway, Good luck, Richardo!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • http://www.itdecent.cn/p/7e3e2b898143這是上次寫的泛型,當(dāng)時(shí)其實(shí)還是一知半解。...
    Richardo92閱讀 420評(píng)論 0 1
  • 一、基本數(shù)據(jù)類型 注釋 單行注釋:// 區(qū)域注釋:/* */ 文檔注釋:/** */ 數(shù)值 對(duì)于byte類型而言...
    龍貓小爺閱讀 4,467評(píng)論 0 16
  • 泛型是Java SE1.5的新特性,泛型的本質(zhì)是參數(shù)化類型,也就是說所操作的數(shù)據(jù)類型被指定為一個(gè)參數(shù)。這種參數(shù)類型...
    流氓劍客閱讀 275評(píng)論 0 0
  • 在經(jīng)過一次沒有準(zhǔn)備的面試后,發(fā)現(xiàn)自己雖然寫了兩年的android代碼,基礎(chǔ)知識(shí)卻忘的差不多了。這是程序員的大忌,沒...
    猿來如癡閱讀 3,131評(píng)論 3 10
  • 2010.9我(右3)和初中同學(xué)(右2) 一起考上了 北方的大學(xué),正在前往城市-哈爾濱。高中好友們都過來機(jī)場(chǎng)相送。...
    愛嬌閱讀 285評(píng)論 0 2

友情鏈接更多精彩內(nèi)容