一、Collections類和Collection接口

                   Collections是針對(duì)集合類的一個(gè)幫助類,他提供一系列靜態(tài)方法實(shí)現(xiàn)對(duì)各種集合的搜索、排序、線程安全化等操作。

              Collection是最基本的集合接口,一個(gè)Collection代表一組Object,即Collection的元素(Elements)。一些 Collection允許相同的元素而另一些不行。一些能排序而另一些不行。Java SDK不提供直接繼承自Collection的 類,Java SDK提供的類都是繼承自Collection的“子接口”如List和Set。

          二、現(xiàn)在來談?wù)凧ava集合的一些實(shí)現(xiàn)類。

          Collection
          List

          ArreyList 

          Vector

          LinkedList

          │└Stack

          └Set

          HashSet
          LinkedHashSet

          │└TreeSet

           

          List代表有序、重復(fù)的集合

          1.ArrayList類
            ArrayList實(shí)現(xiàn)了可變大小的數(shù)組。它允許所有元素,包括null。ArrayList沒有同步。
          size,isEmpty,get,set方法運(yùn)行時(shí)間為常數(shù)。但是add方法開銷為分?jǐn)偟某?shù),添加n個(gè)元素需要O(n)的時(shí)間。其他的方法運(yùn)行時(shí)間為線性。
            每個(gè)ArrayList實(shí)例都有一個(gè)容量(Capacity),即用于存儲(chǔ)元素的數(shù)組的大小。這個(gè)容量可隨著不斷添加新元素而自動(dòng)增加,但是增長(zhǎng)算法 并沒有定義。當(dāng)需要插入大量元素時(shí),在插入前可以調(diào)用ensureCapacity方法來增加ArrayList的容量以提高插入效率。
            和LinkedList一樣,ArrayList也是非同步的(unsynchronized)。

          2.Vector類
            Vector非常類似ArrayList,但是Vector是同步的。由Vector創(chuàng)建的Iterator,雖然和ArrayList創(chuàng)建的Iterator是同一接口,但是,因?yàn)閂ector是同步的,當(dāng)一個(gè)Iterator被創(chuàng)建而且正在被使用,另一個(gè)線程改變了Vector的狀態(tài)(例如,添加或刪除了一些元素),這時(shí)調(diào)用Iterator的方法時(shí)將拋出ConcurrentModificationException,因此必須捕獲該異常。

           

          3.LinkedList類
            LinkedList實(shí)現(xiàn)了List接口,允許null元素。此外LinkedList提供額外的get,remove,insert方法在 LinkedList的首部或尾部。這些操作使LinkedList可被用作堆棧(stack),隊(duì)列(queue)或雙向隊(duì)列(deque)。
            注意LinkedList沒有同步方法。如果多個(gè)線程同時(shí)訪問一個(gè)List,則必須自己實(shí)現(xiàn)訪問同步。一種解決方法是在創(chuàng)建List時(shí)構(gòu)造一個(gè)同步的List:
              List list = Collections.synchronizedList(new LinkedList(...));

           

          4.Stack 類
            Stack繼承自Vector,實(shí)現(xiàn)一個(gè)后進(jìn)先出的堆棧。Stack提供5個(gè)額外的方法使得Vector得以被當(dāng)作堆棧使用。基本的push和pop方法,還有peek方法得到棧頂?shù)脑兀琫mpty方法測(cè)試堆棧是否為空,search方法檢測(cè)一個(gè)元素在堆棧中的位置。Stack剛創(chuàng)建后是空棧。

           

          Set代表無序、不可重復(fù)的集合

           

          Map
          HashMap

          Hashtable

          TreeMap
          └WeakHashMap

          Map沒有繼承Collection接口

          1.Hashtable類
            Hashtable繼承Map接口,實(shí)現(xiàn)一個(gè)key-value映射的哈希表。任何非空(non-null)的對(duì)象都可作為key或者value。Hashtable是同步的。

           

          2.HashMap類
            HashMap和Hashtable類似,不同之處在于 HashMap是非同步的,并且允許null,即null value和null key。,但是將HashMap視為Collection時(shí) (values()方法可返回Collection),其迭代子操作時(shí)間開銷和HashMap的容量成比例。因此,如果迭代操作的性能相當(dāng)重要的話,不要 將HashMap的初始化容量設(shè)得過高,或者load factor過低。

          3.WeakHashMap類
            WeakHashMap是一種改進(jìn)的HashMap,它對(duì)key實(shí)行“弱引用”,如果一個(gè)key不再被外部所引用,那么該key可以被GC回收。

           

           

          三、集合類的遍歷

          遍歷通用Collection

          Iterator it = collection.iterator(); // 獲得一個(gè)迭代子
            while(it.hasNext()) {
             Object obj = it.next(); // 得到下一個(gè)元素
          }


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


          網(wǎng)站導(dǎo)航:
           

          posts - 34, comments - 38, trackbacks - 0, articles - 0

          Copyright © 陳小東

          主站蜘蛛池模板: 吉水县| 南安市| 岳普湖县| 淮阳县| 应城市| 娱乐| 滕州市| 台南县| 南靖县| 黄石市| 隆安县| 东乡族自治县| 沂南县| 湘乡市| 松溪县| 乌兰浩特市| 怀远县| 中阳县| 香河县| 石渠县| 大悟县| 广丰县| 澳门| 兴国县| 张家港市| 离岛区| 新蔡县| 元氏县| 洛宁县| 基隆市| 海宁市| 元谋县| 客服| 霍邱县| 犍为县| 宾川县| 西充县| 普安县| 大关县| 普定县| 南丹县|