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

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

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

    posts - 0, comments - 77, trackbacks - 0, articles - 356
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    集合Collection框架

    Posted on 2007-09-20 23:06 semovy 閱讀(357) 評論(0)  編輯  收藏 所屬分類: JAVA基礎(chǔ)
    一直都不敢對這個(gè)系列的類入手,首先感覺太復(fù)雜了,但是我最終還是說服了自己咬咬牙,還是來看看,先在網(wǎng)上搜了一下關(guān)于這個(gè)方面的
    文章感覺是這個(gè)方面的知識跟一些數(shù)學(xué)知識聯(lián)系起來看還是可以找到頭緒的。
    首先就是集合的概念包括一些集合的運(yùn)算,象交,并,包含的關(guān)系,映射也是屬于集合但是java里的映射Map接口并不是繼承自Collection。
    好了,首先我們來看看
    Collection接口:
        Collection接口用于表示任何對象或元素組。想要盡可能以常規(guī)方式處理一組元素時(shí),就使用這一接口。
        該接口支持如添加和除去等基本操作。設(shè)法除去一個(gè)元素時(shí),如果這個(gè)元素存在,除去的僅僅是集合中此元素的一個(gè)實(shí)例。
     boolean add(Object element)
     boolean remove(Object element)
        Collection接口還支持查詢操作:
     int size()
     boolean isEmpty()
     boolean contains(Object element)
     Iterator iterator()
        Collection接口支持的其它操作,要么是作用于元素組的任務(wù),要么是同時(shí)作用于整個(gè)集合的任務(wù)。
     boolean containsAll(Collection collection)
     boolean addAll(Collection collection)
     void clear()
     void removeAll(Collection collection)
     void retainAll(Collection collection)
        containsAll()方法允許您查找當(dāng)前集合是否包含了另一個(gè)集合的所有元素,即另一個(gè)集合是否是當(dāng)前集合的
     子集。其余方法是可選的,因?yàn)樘囟ǖ募峡赡懿恢С旨细摹ddAll()方法確保另一個(gè)集合中的所有
     元素都被添加到當(dāng)前的集合中,通常稱為并。clear()方法從當(dāng)前集合中除去所有元素。removeAll()方法類似于
     clear(),但只除去了元素的一個(gè)子集。retainAll()方法類似于removeAll()方法,不過可能感到它所做的與前
     面正好相反:它從當(dāng)前集合中除去不屬于指定集合的元素,即交。
    List接口:
      繼承Collection以實(shí)現(xiàn)一個(gè)允許有重復(fù)項(xiàng)的有序集合,添加了索引項(xiàng),和ListIterator迭代器(可以雙向迭代)
      另外函數(shù)subList(int from, int end)遵循前包后不包的原則(也就是返回的List只包含下標(biāo)為
      第from,from+1,...end-1個(gè)元數(shù)),
      實(shí)現(xiàn)類:
        ArrayList,LinkedList,區(qū)別在于前者是基于數(shù)組來實(shí)現(xiàn)的,后者是基于鏈表來實(shí)現(xiàn)(里面有個(gè)內(nèi)部元素類
        Entry)導(dǎo)致前面的隨即訪問較后者要快,但是插入、移除操作不及后面的快,另后者操作方法也更靈活,
        包括前者沒有的add,get,remove-([First][Last]),這些方法可以作為堆棧,隊(duì)列,雙向隊(duì)列使用。
        Vector,可以實(shí)現(xiàn)可增長的對象數(shù)組。與數(shù)組一樣,它包含可以使用整數(shù)索引進(jìn)行訪問的組件。但是,
        Vector 的大小可以根據(jù)需要增大或縮小,以適應(yīng)創(chuàng)建 Vector 后進(jìn)行添加或移除項(xiàng)的操作。 并發(fā)編程不安全
      這里講一下1.5版本和以前的版本不同的地方。
      往一個(gè)ArrayList中加入一個(gè)整數(shù),1.5版本以前的版本寫法是:
      List list = new ArrayList();
     list.add( new Integer( 10 ) );
      而在1.5版本中可以寫為:
     list.add( 10 );
       因?yàn)椋?.5版本中,對一個(gè)整數(shù)進(jìn)行包裝,使之成為一個(gè)Integer對象(即包裝,boxing),然后加入到一個(gè)
        ArrayList中的做法被認(rèn)為是沒有必要的,反之,解包(unboxing)的做法也是沒有必要的,這樣的代碼只是增
      加了程序的文本長度而已,所以1.5版本支持了自動(dòng)包裝和解包操作,對于bool/Boolean,byte/Byte,
      double/Double,short/Short,int/Integer,long/Long,float/Float的相應(yīng)包裝/解包操作都進(jìn)行了支持,
      從而使代碼變得簡單。


    Set接口:(共15個(gè)函數(shù))
      繼承Collection,不允許重復(fù)的項(xiàng),沒有添加任何新的方法,只是在添加的函數(shù)中依賴元素equals()方法檢
      查等同性。
      實(shí)現(xiàn)類:
        HashSet:為快速查找而設(shè)計(jì)的Set,存入的對象必須實(shí)現(xiàn)hashCode();
        TreeSet:保持次序的Set ,底層為樹結(jié)構(gòu),使用它可以從Set中提取有序的序列,
        LinkedHashSet:具有HashSet的查詢速度,且內(nèi)部使用鏈表維護(hù)元素的順序。
       

    Map接口:
      首先說明的是與Collection沒有任何關(guān)系,反映的是一對映射關(guān)系的集合,該接口描述了從不重復(fù)的鍵到值
      的映射。我們可以把這個(gè)接口方法分成三組操作:改變、查詢和提供可選視圖。
      改變操作允許您從映射中添加和除去鍵-值對。鍵和值都可以為null。但是,您不能把Map作為一個(gè)鍵或值添
      加給自身。
      Object put(Object key, Object value)
      Object remove(Object key)
      void putAll(Map mapping)
      void clear()
      查詢操作允許您檢查映射內(nèi)容:
      Object get(Object key)
      boolean containsKey(Object key)
      boolean containsValue(Object value)
      int size()
      boolean isEmpty()
      最后一組方法允許您把鍵或值的組作為集合來處理。
     public Set keySet()
     public Collection values()
     public Set entrySet()
      因?yàn)橛成渲墟I的集合必須是唯一的,您用Set支持。因?yàn)橛成渲兄档募峡赡懿晃ㄒ唬肅ollection支持。
      最后一個(gè)方法返回一個(gè)實(shí)現(xiàn)Map.Entry接口的元素Set。
      實(shí)現(xiàn)類:
        TreeMap:基于紅黑樹的實(shí)現(xiàn),查看鍵或鍵值對時(shí),他們能會被排序,TreeMap是唯一一個(gè)帶subMap()的Map,
         它可以返回一個(gè)子樹。
        HashMap:是Map基于散列表的實(shí)現(xiàn),插入和查詢“鍵值對”的開銷是固定的,可以通過構(gòu)造起設(shè)置容量和負(fù)載
                因子(load factor),以調(diào)整容器性能。
        LinkedHashMap:Map 接口的哈希表和鏈接列表實(shí)現(xiàn),具有可預(yù)知的迭代順序。此實(shí)現(xiàn)與 HashMap 的不同
         之處在于,后者維護(hù)著一個(gè)運(yùn)行于所有條目的雙重鏈接列表。此鏈接列表定義了迭代順序,該迭
         代順序通常就是將鍵插入到映射中的順序(插入順序)。注意,如果在映射中重新插入鍵,則插
         入順序不受影響。(如果在調(diào)用 m.put(k, v) 前 m.containsKey(k) 返回了 true,則調(diào)用時(shí)會
         將鍵 k 重新插入到映射 m 中。)
        這里要解釋一下loadfactor,默認(rèn)為0.75,負(fù)載因子是哈希表在其容量自動(dòng)增加之前可以達(dá)到多滿的一種
        尺度。當(dāng)哈希表中的條目數(shù)超出了加載因子與當(dāng)前容量的乘積時(shí),則要對該哈希表進(jìn)行rehash操作
        (即重建內(nèi)部數(shù)據(jù)結(jié)構(gòu)),從而哈希表將具有大約兩倍的桶數(shù)。
     通常,默認(rèn)加載因子 (.75)在時(shí)間和空間成本上尋求一種折衷。加載因子過高雖然減少了空間開銷,
     但同時(shí)也增加了查詢成本(在大多數(shù) HashMap 類的操作中,包括 get和put操作,都反映了這一點(diǎn))。
     在設(shè)置初始容量時(shí)應(yīng)該考慮到映射中所需的條目數(shù)及其加載因子,以便最大限度地減少 rehash
     操作次數(shù)。如果初始容量大于最大條目數(shù)除以加載因子,則不會發(fā)生 rehash 操作。


    總結(jié)java.util包里的東東包括一些集合框架方面的,日歷,時(shí)間方面,及正則表達(dá)式,模式匹配等方面的類 

    主站蜘蛛池模板: 成全在线观看免费观看大全| 全部免费国产潢色一级| 精品一区二区三区免费观看 | 一级做a爰黑人又硬又粗免费看51社区国产精品视 | 日本免费高清视频| 免费无码婬片aaa直播表情| 亚洲一区二区三区四区视频| 亚洲av无码av制服另类专区| 亚洲AV无码一区二区三区在线观看 | 9277手机在线视频观看免费| 国产在线播放线91免费| 免费很黄无遮挡的视频毛片| 亚洲人成网站看在线播放| 久久久久久久亚洲Av无码| 亚洲中文字幕无码一区 | 黄色大片免费网站| 亚洲国产午夜精品理论片在线播放 | 老司机午夜精品视频在线观看免费| 亚洲人成网国产最新在线| 亚洲精品亚洲人成在线观看麻豆| 亚洲精品无码乱码成人| 国产亚洲精品激情都市| 亚洲国产婷婷香蕉久久久久久| 日本免费一本天堂在线| 在线A级毛片无码免费真人| 日韩亚洲国产高清免费视频| 18禁成人网站免费观看| 99久久免费看国产精品| 日韩av无码久久精品免费| 免费无码又爽又刺激一高潮| 中文字幕一区二区免费| 国产精品99爱免费视频| 久久一区二区免费播放| 国产人成网在线播放VA免费| 成人免费一区二区三区| 久久久久久国产a免费观看不卡| 中文字幕免费视频精品一| a级毛片免费观看视频| 久久青青草原国产精品免费| 免费A级毛片无码视频| 亚洲毛片免费视频|