<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-8  評(píng)論-67  文章-0  trackbacks-0

    在Java中,容器主要包括:數(shù)組(Array)、集合(Collection)和映射(Map)三種。

    (1)數(shù)組Array:將數(shù)字與元素聯(lián)系起來(lái),其中的元素都具有相同的數(shù)據(jù)類型,只能通過(guò)下標(biāo)來(lái)訪問(wèn)其元素;數(shù)組可以是一維的,也可以是多維的;數(shù)組一旦生成,其容量就不能改變。數(shù)組是一種復(fù)合數(shù)據(jù)類型,在Java中,除了可以像“int[] array;”來(lái)聲明和表示一個(gè)數(shù)組,還可以用Array類來(lái)表示一個(gè)數(shù)組,同樣地,JDK類庫(kù)還提供了Arrays類類操作數(shù)組,該類定義了對(duì)數(shù)組進(jìn)行操作的各種方法(賦值、排序、搜索、比較、查找元素等)。

    (2)集合Collection:是一個(gè)接口類,包括List、Set、Queue等子接口,其具體的實(shí)現(xiàn)類可以用來(lái)保存多個(gè)元素。這里只討論常用的子接口List和Set的常用實(shí)現(xiàn)類。常用的List實(shí)現(xiàn)類有ArrayList、Vector和LinkedList等,常用的Set實(shí)現(xiàn)類有HashSet、LinkedHashSet和TreeSet等。需要注意的是,List和Set有著很大的不同,主要包括是否允許元素重復(fù)和是否維護(hù)元素的次序。

    (3)映射Map:保存相關(guān)聯(lián)的鍵值對(duì)。其具體的實(shí)現(xiàn)類可以將鍵映射到值,根據(jù)鍵得到值,因此,一個(gè)映射不能包含重復(fù)的鍵,但是允許有重復(fù)的值,每個(gè)鍵最多只能映射到一個(gè)值。 常見(jiàn)的Map實(shí)現(xiàn)類有HashMap、Hashtable、LinkedHashMap和TreeMap等。

    為了討論的方便,下面以Array,List、Set、Map為分類來(lái)討論這幾種容器的使用特點(diǎn)。

    (1)Array:

        數(shù)組的使用很直接,主要是根據(jù)下標(biāo)來(lái)獲取其元素。其特點(diǎn)就是一旦生成,其容量不能改變,并且每個(gè)元素之間不允許有“空隙”。其使用實(shí)例可以參考電子工業(yè)出版社“寶典”系列之《Java JDK 實(shí)例寶典》(夏先波 編著),個(gè)人感覺(jué)這本書(shū)寫(xiě)得不錯(cuò),給出了許多JDK類庫(kù)的具體使用實(shí)例,代碼的注釋也比較詳細(xì),很適合初學(xué)者入門(mén)學(xué)習(xí)使用,如果看Java Doc 還是有不明白的地方,也可以參考此書(shū):)

    (2)List:可用來(lái)存放多個(gè)元素,能夠自動(dòng)擴(kuò)充容量,能夠維護(hù)元素的次序,并且允許元素重復(fù)。

        (2.1)ArrayList類:最常用的List實(shí)現(xiàn)類,內(nèi)部是通過(guò)數(shù)組實(shí)現(xiàn)的,它允許對(duì)元素進(jìn)行快速的隨機(jī)訪問(wèn),但是要從ArrayList的中間位置插入或者刪除    元素時(shí),需要對(duì)數(shù)組進(jìn)行復(fù)制、移動(dòng),代價(jià)比較高,因此,ArrayList適合隨機(jī)查找和遍歷,不適合插入和刪除。

        (2.2)Vector類:同ArrayList一樣,其內(nèi)部也是通過(guò)數(shù)組實(shí)現(xiàn)的,不同的是,Vector支持線程的同步,能夠避免多線程同時(shí)寫(xiě)而引起的不一致,但是實(shí)現(xiàn)線程的同步需要很高的代價(jià),因此訪問(wèn)Vector比ArrayList慢。

        (2.3)LinkedList類:見(jiàn)其名,該類與鏈表肯定有關(guān)系:)該類的內(nèi)部是通過(guò)鏈表來(lái)實(shí)現(xiàn)的,很適合數(shù)據(jù)的動(dòng)態(tài)插入和刪除,但是隨即訪問(wèn)和遍歷的速度比較慢。此外,該類還提供了List接口中沒(méi)有定義的方法,專門(mén)用于操作表頭和表尾元素,可以當(dāng)作堆棧、隊(duì)列和雙向隊(duì)列使用。


    (3)Set:可用來(lái)存放多個(gè)元素,但是不允許元素重復(fù)(即不保存重復(fù)元素),也不能夠維護(hù)元素的次序。很直觀,聯(lián)想一下數(shù)學(xué)中的集合的概念就很好理解了。此外,需要注意的是,加入Set的元素必須定義equals()方法以確保對(duì)象的唯一性,如String對(duì)象。

        (3.1) HashSet類:采用散列函數(shù)對(duì)元素進(jìn)行排序,是專門(mén)為快速查詢而設(shè)計(jì)的存入HashSet的對(duì)象必須定義hashCode()方法。

        (3.2)TreeSet類:采用紅黑樹(shù)的數(shù)據(jù)結(jié)構(gòu)進(jìn)行排序元素,使用它可以從Set中提取有序的序列。

        (3.3) LinkedHashSet類:內(nèi)部使用散列以加快查詢速度,同時(shí)使用鏈表維護(hù)元素的插入次序,在使用迭代器遍歷時(shí),會(huì)按插入次序顯示結(jié)果。


    (4)Map:可以用來(lái)存放相關(guān)聯(lián)的鍵值對(duì),根據(jù)鍵得到值。常見(jiàn)的Map實(shí)現(xiàn)類有HashMap、Hashtable、LinkedHashMap和TreeMap。

        (4.1)HashMap類:一個(gè)最常用的Map,它根據(jù)鍵的hashCode值存儲(chǔ)數(shù)據(jù),根據(jù)鍵可以直接獲取它的值,具有很快的訪問(wèn)速度,但不支持線程同步。HashMap最多允許一條記錄的鍵為null,但是允許多條記錄的值為null。
        
        (4.2)Hashtable類:與HashMap類似,但是它不允許記錄的鍵或者值為null,支持線程同步,因而Hashtable在寫(xiě)入數(shù)據(jù)時(shí)會(huì)很慢。

        (4.3)LinkedHashMap類:保存了記錄的插入順序,在用Iterator遍歷它時(shí),先得到的記錄肯定時(shí)先插入的,在遍歷的時(shí)候比HashMap慢。

        (4.4)TreeMap類:能夠把它保存的記錄根據(jù)鍵排序,默認(rèn)為升序排列。當(dāng)用Iterator遍歷它時(shí),得到的記錄是排過(guò)序的記錄。

     
    e.g. 看看下面這段代碼的運(yùn)行結(jié)果是什么?
        

    public class SetList {
        
    public static void main(String[] args) {
                Set
    <Integer> set = new TreeSet<Integer>();
                List
    <Integer> list = new ArrayList<Integer>();
                
    for (int i = -3; i < 3; i++{
                        set.add(i);
                        list.add(i);
                }

                
    for (int i = 0; i < 3; i++{
                        set.remove(i);
                        list.remove(i);
                }

                System.out.println(set 
    + " " + list);
        }

    }

     

     

     

    posted on 2008-07-02 02:21 獨(dú)孤求敗 閱讀(2341) 評(píng)論(1)  編輯  收藏 所屬分類: Java JDK 學(xué)習(xí)筆記

    評(píng)論:
    # re: Java標(biāo)準(zhǔn)類庫(kù)提供的容器總結(jié) 2008-07-30 11:28 | 代理163
    寫(xiě)的不錯(cuò)  回復(fù)  更多評(píng)論
      

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲日韩欧洲乱码AV夜夜摸| 久久亚洲精品国产精品| 亚洲卡一卡二卡乱码新区| 一级毛片全部免费播放| 99久久亚洲综合精品成人网| 九九精品成人免费国产片| 久久精品国产99精品国产亚洲性色| 99精品免费视品| 久久夜色精品国产亚洲AV动态图 | 一级做a爰片久久毛片免费看| 全黄a免费一级毛片人人爱| 黄色一级毛片免费看| 久久亚洲高清综合| 四虎影视无码永久免费| 亚洲一二成人精品区| 亚洲免费闲人蜜桃| 国产亚洲精aa在线看| 又爽又黄无遮挡高清免费视频| 免费手机在线看片| 亚洲精品无码乱码成人 | 亚洲一本一道一区二区三区| 成年女人毛片免费播放视频m| 亚洲精品亚洲人成在线| 免费又黄又爽的视频| 青青操视频在线免费观看| 亚洲天堂一区二区三区四区| 成人五级毛片免费播放| 手机永久免费的AV在线电影网| 国产AⅤ无码专区亚洲AV| 91香蕉在线观看免费高清| 亚洲精品国产第一综合99久久| 久久亚洲色一区二区三区| 黄色永久免费网站| 黄色免费网站在线看| 久久精品国产亚洲AV无码偷窥| 午夜影视在线免费观看| 黄床大片免费30分钟国产精品| 亚洲国产亚洲片在线观看播放| 国产一区二区免费在线| **俄罗斯毛片免费| xxxx日本在线播放免费不卡|