我的隱式生活(My Implicit Life)

          繼續(xù)搞“對象”,玩OO.

          首頁 新隨筆 聯(lián)系 聚合 管理
            11 Posts :: 1 Stories :: 39 Comments :: 0 Trackbacks

          Java Collection Framwork中的類的確是最重要的基礎(chǔ)api,實(shí)現(xiàn)任何算法,基本上都很難離開它。

          因此理解這堆“集合(Collection)類”很有必要。聲明一下,以前一直都是叫它們集合類,但是好像Think In Java的作者鄙視了這個(gè)說法,嚴(yán)格的說應(yīng)該叫Container類,而后看了它整整一章書以后,覺得還是人家說的有道理。

          它說這個(gè)container類庫,包含了兩大類,Collection和Map,而Collection又可以分為List和Set。當(dāng)然這些抽象概念都被定義成了接口。

          話說,這樣的分類的確是嚴(yán)格按照類之間的繼承關(guān)系來說得,但是俺總覺得很別扭,真動(dòng)手的時(shí)候,還是很難選擇。當(dāng)然,Anytime and Anywhere使用ArrayList絕對都能解決問題,但這樣做畢竟太農(nóng)民了一點(diǎn)。

          所以,我自己有了一些想法。先回歸到最基本最基本的數(shù)據(jù)結(jié)構(gòu)的層面,管你是Collection還是Container,反正描述的都是一堆東西吧。數(shù)據(jù)結(jié)構(gòu)第一章講了一個(gè)結(jié)構(gòu):在物理上連續(xù)分配空間的順序結(jié)構(gòu),叫順序表(希望記性是好的),而離散分配空間的,應(yīng)該叫做鏈表,最常用的就是單鏈表。這兩個(gè)東西,其實(shí)就是很多復(fù)雜數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ),還記得嗎,當(dāng)時(shí)就是講完這些東西,才開始講棧、隊(duì)列、二叉樹、有向無向圖的。所以,這個(gè)順序結(jié)構(gòu)是很基礎(chǔ)的。而在JAVA中,順序表對應(yīng)的就是List接口,而一般順序表就是ArrayList(有效進(jìn)行隨機(jī)index查找);而單鏈表就是LinkedList(有效進(jìn)行插入和刪除),兩個(gè)的優(yōu)劣當(dāng)年都講爛了,這里就不說了。

          有了這兩個(gè)結(jié)構(gòu)以后,JAVA就不提供Stack和Queue單獨(dú)的類了,因?yàn)椋脩艨梢杂蒙厦鎯蓚€(gè)類輕易的去實(shí)現(xiàn)。

          那Set和Map有怎么跟List連上關(guān)系呢?

          我認(rèn)為可以把它們看成是無序和單一的List(Map只是兩個(gè)有映射關(guān)系的List罷了)。

          Set和Map無序和單一的特性,決定了它們天大的需求就是根據(jù)關(guān)鍵字(元素對象)檢索。so,為了效率,必須hash。

          有了HashSet和HashMap。

          同時(shí),如果非要保持住元素的順序,有了LinkedHashSet、LinkedHashMap。


          結(jié)論:

          假如你的需求是
          1:往Container中放的對象是無序且單一的;
          2:經(jīng)常要檢索。
          用HashSet或HashMap吧。

          ps:這兩個(gè)條件其實(shí)是一回事,因?yàn)槿绻遣粏我坏脑挘闳z索它干嘛。

          如果進(jìn)而需要保持元素的順序,不要讓他順便iteration,那就選擇LinkedHashSet和LinkedHashMap。

          假如你的需求不滿足以上1&2,那你放心,List肯定能幫你解決,你只要稍微想一下是ArrayList好還是LinkedList好。

          題外話:

          關(guān)于Hash,務(wù)必記得要讓自己的元素對象override hashCode()和 equles() 方法,要不你直接可以洗了睡。

          關(guān)于所有這些Container,務(wù)必記得有個(gè)輔助類叫Interator,遍歷盡量要用它。

          關(guān)于一些老的Stack、Vector、HashTable,聽說以后不要用了哦。收到啦!!

          posted on 2006-09-20 16:53 marco 閱讀(2329) 評論(0)  編輯  收藏 所屬分類: -=Java API=-

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 思茅市| 紫云| 德昌县| 精河县| 奇台县| 崇阳县| 大厂| 乌兰察布市| 凌云县| 泸水县| 阆中市| 峨眉山市| 治县。| 蕉岭县| 博兴县| 连云港市| 车致| 榆林市| 五莲县| 横山县| 钦州市| 乌苏市| 滨州市| 兰坪| 高青县| 黔西县| 容城县| 卢湾区| 固原市| 博野县| 福州市| 广汉市| 馆陶县| 襄汾县| 沅江市| 武宁县| 荣昌县| 南雄市| 桃源县| 长汀县| 永城市|