一、Collections類和Collection接口

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

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

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

          Collection
          List

          ArreyList 

          Vector

          LinkedList

          │└Stack

          └Set

          HashSet
          LinkedHashSet

          │└TreeSet

           

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

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

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

           

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

           

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

           

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

           

          Map
          HashMap

          Hashtable

          TreeMap
          └WeakHashMap

          Map沒有繼承Collection接口

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

           

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

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

           

           

          三、集合類的遍歷

          遍歷通用Collection

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


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


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

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

          Copyright © 陳小東

          主站蜘蛛池模板: 喀喇沁旗| 龙江县| 长岭县| 白河县| 三江| 芮城县| 吴旗县| 大足县| 江华| 铁力市| 云龙县| 河西区| 嫩江县| 缙云县| 伊川县| 阳新县| 德阳市| 三台县| 潮安县| 茌平县| 乐陵市| 涟源市| 黄石市| 慈溪市| 长治县| 庆安县| 元江| 蕉岭县| 灵璧县| 高阳县| 宜宾市| 宜丰县| 宝鸡市| 嘉荫县| 鹤庆县| 广西| 张北县| 青岛市| 察雅县| 睢宁县| 莱州市|