我的JAVA窩! - BlogJava

          集合框架類筆記的補(bǔ)充

          java .util.*定義了一系列的接口和類,告訴我們用什么類NEW出一個(gè)對(duì)象,可以進(jìn)行超越數(shù)組的操作。
          (注:JAVA1.5對(duì)JAVA1.4的最大改進(jìn)就是增加了對(duì)范型的支持)

          Set接口是數(shù)學(xué)中集合的概念:其元素?zé)o序,且不可重復(fù)。(正好與List對(duì)應(yīng))

          !!注意數(shù)組和集合的區(qū)別:數(shù)組中只能存簡(jiǎn)單數(shù)據(jù)類型。Collection接口和Map接口只能存對(duì)象。

          只有List可用get和size。而Set則不可用(因其無(wú)序)。

          集合中每一個(gè)元素都有對(duì)象,如有字符串要經(jīng)過(guò)強(qiáng)制類型轉(zhuǎn)換。

          Collections是工具類,所有方法均為有用方法,且方法為static。


          Collections.Sort()分為兩部分,一部分為排序規(guī)則;一部分為排序算法。
          規(guī)則用來(lái)判斷對(duì)象;算法是考慮如何排序。
          對(duì)于自定義對(duì)象,Sort不知道規(guī)則,所以無(wú)法比較。這種情況下一定要定義排序規(guī)則。方式有兩種:
          java.lang下面有一個(gè)接口:Comparable(可比較的)
          可以讓自定義對(duì)象實(shí)現(xiàn)一個(gè)接口,這個(gè)接口只有一個(gè)方法comparableTo(Object o)
          其規(guī)則是當(dāng)前對(duì)象與o對(duì)象進(jìn)行比較,其返回一個(gè)int值,系統(tǒng)根據(jù)此值來(lái)進(jìn)行排序。
          如 當(dāng)前對(duì)象>o對(duì)象,則返回值>0;(可將返回值定義為1)
          如 當(dāng)前對(duì)象=o對(duì)象,則返回值=0;
          如 當(dāng)前對(duì)象<o對(duì)象,則返回值〈0。(可將返回值定義為-1)
          看TestArraylist的java代碼。
          我們通過(guò)返回值1和-1位置的調(diào)換來(lái)實(shí)現(xiàn)升序和降序排列的轉(zhuǎn)換。

          java.util下有一個(gè)Comparator(比較器)
          它擁有compare(),用來(lái)比較兩個(gè)方法。
          要生成比較器,則用Sort中Sort(List,List(Compate))
          第二種方法更靈活,且在運(yùn)行的時(shí)候不用編譯。

          注意:要想實(shí)現(xiàn)comparTo()就必須在主方法中寫上implement comparable.


          集合的最大缺點(diǎn)是無(wú)法進(jìn)行類型判定(這個(gè)缺點(diǎn)在JAVA1.5中已經(jīng)解決),這樣就可能出現(xiàn)因?yàn)轭愋筒煌霈F(xiàn)類型錯(cuò)誤。
          解決的方法是添加類型的判斷。

          而在LinkedList的底層是一種雙向循環(huán)鏈表。在此鏈表上每一個(gè)數(shù)據(jù)節(jié)點(diǎn)都由三部分組成:前指針(指向前面的節(jié)點(diǎn)的位置),數(shù)據(jù),后指針(指向后面的節(jié)點(diǎn)的位置)。最后一個(gè)節(jié)點(diǎn)的后指針指向第一個(gè)節(jié)點(diǎn)的前指針,形成一個(gè)循環(huán)。

          LinkedList經(jīng)常用在增刪操作較多而查詢操作很少的情況下:隊(duì)列和堆棧。
          隊(duì)列:先進(jìn)先出的數(shù)據(jù)結(jié)構(gòu)。
          堆棧:后進(jìn)先出的數(shù)據(jù)結(jié)構(gòu)。
          注意:使用堆棧的時(shí)候一定不能提供方法讓不是最后一個(gè)元素的元素獲得出棧的機(jī)會(huì)。
          LinkedList提供以下方法:(ArrayList無(wú)此類方法)
          addFirst();
          removeFirst();
          addLast();
          removeLast();


          Push用addFirst();pop用removeFirst(),實(shí)現(xiàn)后進(jìn)先出。
          用isEmpty()--其父類的方法,來(lái)判斷棧是否為空。

          在隊(duì)列中,put為入隊(duì)列操作,get為出隊(duì)列操作。
          Put用addFirst(),get用removeLast()實(shí)現(xiàn)隊(duì)列。

          List接口的實(shí)現(xiàn)類(Vector)(與ArrayList相似,區(qū)別是Vector是重量級(jí)的組件,使用使消耗的資源比較多。)
          結(jié)論:在考慮并發(fā)的情況下用Vector(保證線程的安全)。
          在不考慮并發(fā)的情況下用ArrayList(不能保證線程的安全)。

          面試經(jīng)驗(yàn)(知識(shí)點(diǎn)):
          java.util.stack(stack即為堆棧)的父類為Vector。可是stack的父類是最不應(yīng)該為Vector的。因?yàn)閂ector的底層是數(shù)組,且Vector有g(shù)et方法(意味著它可能訪問(wèn)到并不屬于最后一個(gè)位置元素的其他元素,很不安全)。
          對(duì)于堆棧和隊(duì)列只能用push類和get類。
          Stack類以后不要輕易使用。
          !!!實(shí)現(xiàn)堆棧一定要用LinkedList。


          (在JAVA1.5中,collection有queue來(lái)實(shí)現(xiàn)隊(duì)列。)








          posted on 2007-03-19 22:04 J2S 閱讀(568) 評(píng)論(1)  編輯  收藏

          評(píng)論

          # re: 集合框架類筆記的補(bǔ)充 2008-09-13 18:23

          學(xué)習(xí)了,總結(jié)的好,只是不明白“數(shù)組中只能存簡(jiǎn)單數(shù)據(jù)類型”中簡(jiǎn)單數(shù)據(jù)類型是指什么?數(shù)組中什么都能放吧?聲明成什么類型就能放什么類型  回復(fù)  更多評(píng)論   


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


          網(wǎng)站導(dǎo)航:
           
          <2007年3月>
          25262728123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(2)

          隨筆檔案

          最新隨筆

          搜索

          積分與排名

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 广汉市| 神木县| 富平县| 紫云| 吉安县| 揭东县| 崇州市| 色达县| 桂东县| 祁东县| 新郑市| 兴城市| 邯郸县| 晋宁县| 遂溪县| 呼伦贝尔市| 偃师市| 西乌珠穆沁旗| 浮山县| 湘潭县| 普兰店市| 大悟县| 民丰县| 盘山县| 都匀市| 唐山市| 星子县| 凤冈县| 中卫市| 迁西县| 衡水市| 汾阳市| 阜新市| 呼伦贝尔市| 衢州市| 金山区| 奇台县| 沅江市| 清苑县| 皋兰县| 龙川县|