1. 程式人生 > >Java集合原始碼分析01----集合框架

Java集合原始碼分析01----集合框架

在java.util包下面提供了一些集合類,又稱為容器。相比長度固定,存放基本資料的陣列,集合的長度是可變的,並且存放的是物件的引用。Java集合框架學習大致可以分為五個部分:List列表,Set集合,Map對映,迭代器(Iterator,Enumeration),工具類(Arrays,Collections)

 

Java集合類主要分為兩個部分:Collection和Map.

1.Collection介面是Collection層次結構中的根介面,包含了對元素操作的基本方法和屬性,它主要包含了兩部分:List集合和Set集合。

1)List集合包含了List介面以及List介面的所有實現類,List集合中的元素可以重複並且是有序的。常見的實現類包含ArrayList,LinkedList,兩個類是執行緒不安全的;此外還有執行緒安全的Vector和繼承於Vector的Stack(先進後出的容器)。

2)Set集合包含Set介面和Set介面的所有實現類,Set集合中的元素是不能重複的。常見的實現類包含HashSet,TreeSet,LinkedHashSet。其中TreeSet實現了SortedSet介面,可以對裡面的元素進行排序(集合中儲存的元素要實現介面Comparable介面,實現compareTo()方法),它實際上是通過HashMap實現的。HashSet實際通過HashMap實現的。LinkedHashSet不是同步的,裡面元素是有序的。

3)此外Queue介面也繼承於Collection介面,佇列通常是以FIFO(先進先出)方式排列各個元素,並且只允許在佇列的一端插入元素,在另外一端移除元素。常見實現類有LinkedList和PriorityQueue。

抽象類AbstractCollection,AbstractList,AbstractSet分別繼承了Collection,List,Set,這是一種介面卡模式。這些抽象類實現了介面,重寫了介面中的所有的方法。所有隻要繼承了這些抽象類,新增自己的方法即可,不需要重寫介面中的所有方法。

2.Map集合沒有繼承Collection,提供了key到value的對映。Map集合中不能存在重複的key,每個key只能對映一個對應的value,所以根據key可以查詢對應的value值。AbstractMap抽象類實現了Map介面中大部分方法,其中HashMap,TreeMap,WeakHashMap都是繼承了AbstractMap類,常見的LinkedHashMap和HashTable是直接實現了Map介面。

3.Iterator迭代器是遍歷集合的工具,但無法用於Map集合,用於Collection集合的遍歷。因為Collection介面實現了Iterable介面,Collection介面的實現類都重寫了iterator()方法,其返回了一個實現Iterator介面的物件,使用這個迭代器物件可以依次訪問集合中元素,ListIterator用於各類List集合的遍歷。Enumeration的功能類似於Iterator,用於遍歷集合,但Enumeration介面的功能比Iterator少,只能在Hashtable,Vector,Stack中使用。

4.Arrays和Collections兩個工具類,分別包含了運算元組和集合的各類方法。例如經常使用的Arrays.asList()方法可接受一個數組或者是一個用逗號分隔的元素列表(可變引數),返回一個List物件。Collections.addAll()方法可以接受一個Collection物件,陣列以及一個用逗號分隔的列表,作用是將元素新增到Collection中。