<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 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    集合Collection框架

    Posted on 2007-09-20 23:06 semovy 閱讀(357) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): JAVA基礎(chǔ)
    一直都不敢對(duì)這個(gè)系列的類(lèi)入手,首先感覺(jué)太復(fù)雜了,但是我最終還是說(shuō)服了自己咬咬牙,還是來(lái)看看,先在網(wǎng)上搜了一下關(guān)于這個(gè)方面的
    文章感覺(jué)是這個(gè)方面的知識(shí)跟一些數(shù)學(xué)知識(shí)聯(lián)系起來(lái)看還是可以找到頭緒的。
    首先就是集合的概念包括一些集合的運(yùn)算,象交,并,包含的關(guān)系,映射也是屬于集合但是java里的映射Map接口并不是繼承自Collection。
    好了,首先我們來(lái)看看
    Collection接口:
        Collection接口用于表示任何對(duì)象或元素組。想要盡可能以常規(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()方法類(lèi)似于
     clear(),但只除去了元素的一個(gè)子集。retainAll()方法類(lèi)似于removeAll()方法,不過(guò)可能感到它所做的與前
     面正好相反:它從當(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)類(lèi):
        ArrayList,LinkedList,區(qū)別在于前者是基于數(shù)組來(lái)實(shí)現(xiàn)的,后者是基于鏈表來(lái)實(shí)現(xiàn)(里面有個(gè)內(nèi)部元素類(lèi)
        Entry)導(dǎo)致前面的隨即訪問(wèn)較后者要快,但是插入、移除操作不及后面的快,另后者操作方法也更靈活,
        包括前者沒(méi)有的add,get,remove-([First][Last]),這些方法可以作為堆棧,隊(duì)列,雙向隊(duì)列使用。
        Vector,可以實(shí)現(xiàn)可增長(zhǎng)的對(duì)象數(shù)組。與數(shù)組一樣,它包含可以使用整數(shù)索引進(jìn)行訪問(wèn)的組件。但是,
        Vector 的大小可以根據(jù)需要增大或縮小,以適應(yīng)創(chuàng)建 Vector 后進(jìn)行添加或移除項(xiàng)的操作。 并發(fā)編程不安全
      這里講一下1.5版本和以前的版本不同的地方。
      往一個(gè)ArrayList中加入一個(gè)整數(shù),1.5版本以前的版本寫(xiě)法是:
      List list = new ArrayList();
     list.add( new Integer( 10 ) );
      而在1.5版本中可以寫(xiě)為:
     list.add( 10 );
       因?yàn)椋?.5版本中,對(duì)一個(gè)整數(shù)進(jìn)行包裝,使之成為一個(gè)Integer對(duì)象(即包裝,boxing),然后加入到一個(gè)
        ArrayList中的做法被認(rèn)為是沒(méi)有必要的,反之,解包(unboxing)的做法也是沒(méi)有必要的,這樣的代碼只是增
      加了程序的文本長(zhǎng)度而已,所以1.5版本支持了自動(dòng)包裝和解包操作,對(duì)于bool/Boolean,byte/Byte,
      double/Double,short/Short,int/Integer,long/Long,float/Float的相應(yīng)包裝/解包操作都進(jìn)行了支持,
      從而使代碼變得簡(jiǎn)單。


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

    Map接口:
      首先說(shuō)明的是與Collection沒(méi)有任何關(guān)系,反映的是一對(duì)映射關(guān)系的集合,該接口描述了從不重復(fù)的鍵到值
      的映射。我們可以把這個(gè)接口方法分成三組操作:改變、查詢和提供可選視圖。
      改變操作允許您從映射中添加和除去鍵-值對(duì)。鍵和值都可以為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()
      最后一組方法允許您把鍵或值的組作為集合來(lái)處理。
     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)類(lèi):
        TreeMap:基于紅黑樹(shù)的實(shí)現(xiàn),查看鍵或鍵值對(duì)時(shí),他們能會(huì)被排序,TreeMap是唯一一個(gè)帶subMap()的Map,
         它可以返回一個(gè)子樹(shù)。
        HashMap:是Map基于散列表的實(shí)現(xiàn),插入和查詢“鍵值對(duì)”的開(kāi)銷(xiāo)是固定的,可以通過(guò)構(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í)會(huì)
         將鍵 k 重新插入到映射 m 中。)
        這里要解釋一下loadfactor,默認(rèn)為0.75,負(fù)載因子是哈希表在其容量自動(dòng)增加之前可以達(dá)到多滿的一種
        尺度。當(dāng)哈希表中的條目數(shù)超出了加載因子與當(dāng)前容量的乘積時(shí),則要對(duì)該哈希表進(jìn)行rehash操作
        (即重建內(nèi)部數(shù)據(jù)結(jié)構(gòu)),從而哈希表將具有大約兩倍的桶數(shù)。
     通常,默認(rèn)加載因子 (.75)在時(shí)間和空間成本上尋求一種折衷。加載因子過(guò)高雖然減少了空間開(kāi)銷(xiāo),
     但同時(shí)也增加了查詢成本(在大多數(shù) HashMap 類(lèi)的操作中,包括 get和put操作,都反映了這一點(diǎn))。
     在設(shè)置初始容量時(shí)應(yīng)該考慮到映射中所需的條目數(shù)及其加載因子,以便最大限度地減少 rehash
     操作次數(shù)。如果初始容量大于最大條目數(shù)除以加載因子,則不會(huì)發(fā)生 rehash 操作。


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

    主站蜘蛛池模板: 亚洲AⅤ无码一区二区三区在线| 亚洲一卡2卡三卡4卡无卡下载 | 日本亚洲视频在线| 9420免费高清在线视频| 亚洲高清视频一视频二视频三| 精品国产日韩久久亚洲| 亚洲av无码一区二区三区在线播放| 日本最新免费网站| 免费二级毛片免费完整视频| 天堂亚洲国产中文在线| 99久久综合国产精品免费| 欧美色欧美亚洲另类二区| 亚洲精品白浆高清久久久久久| 国产日韩久久免费影院| 亚洲第一网站男人都懂| 人妻无码久久一区二区三区免费 | 老妇激情毛片免费| 久久综合九九亚洲一区| 永久在线观看免费视频| 亚洲精品无码久久久影院相关影片| 无码日韩人妻AV一区免费l| 亚洲av麻豆aⅴ无码电影| 2021免费日韩视频网| 亚洲久悠悠色悠在线播放| 成人午夜亚洲精品无码网站| 亚洲精品久久无码| 亚洲AV日韩AV鸥美在线观看| 色网站在线免费观看| 亚洲午夜精品第一区二区8050| 亚洲高清中文字幕免费| 成人性生交大片免费看中文| 亚洲国产成人精品不卡青青草原| 午夜在线亚洲男人午在线| 亚洲无码日韩精品第一页| a级大片免费观看| 91大神亚洲影视在线| 免费无码又爽又刺激一高潮| 国产精品亚洲专区无码唯爱网| 亚洲国产激情一区二区三区| 成人无码区免费视频观看| 特黄aa级毛片免费视频播放|