一、Collections類和Collection接口

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

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

          二、現在來談談Java集合的一些實現類。

          Collection
          List

          ArreyList 

          Vector

          LinkedList

          │└Stack

          └Set

          HashSet
          LinkedHashSet

          │└TreeSet

          List代表有序、重復的集合

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

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

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

          4.Stack 類
            Stack繼承自Vector,實現一個后進先出的堆棧。Stack提供5個額外的方法使得Vector得以被當作堆棧使用。基本的push和pop方法,還有peek方法得到棧頂的元素,empty方法測試堆棧是否為空,search方法檢測一個元素在堆棧中的位置。Stack剛創建后是空棧。

          Set代表無序、不可重復的集合
          HashSet和TreeSet的區別
          HashSet無序,TreeSet有序,兩者均不能有重復的對象

          Map
          HashMap

          Hashtable

          TreeMap
          └WeakHashMap

          Map沒有繼承Collection接口

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

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

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

          三、集合類的遍歷

          遍歷通用Collection

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


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


          網站導航:
           

          posts - 5, comments - 0, trackbacks - 0, articles - 0

          Copyright © dongisland

          主站蜘蛛池模板: 天长市| 富阳市| 翁牛特旗| 云龙县| 祁阳县| 永胜县| 新营市| 乐亭县| 曲松县| 绥阳县| 卫辉市| 开封市| 台南市| 临湘市| 榆树市| 乐东| 安溪县| 正宁县| 长岭县| 保康县| 平凉市| 建平县| 宁阳县| 山阳县| 民和| 东丰县| 灌南县| 镇平县| 周口市| 蒙山县| 布拖县| 谢通门县| 吉隆县| 陆河县| 武鸣县| 临桂县| 资溪县| 汉沽区| 聂拉木县| 武隆县| 鄂伦春自治旗|