一、Java集合架構簡介及其關系圖
Java集合架構的作用:為了友善高效操作對象,将對象放入容器中,統一管理。數組也是一種簡單的容器,集合架構的容器是比較複雜的容器。
其中包含的具體的集合類,對于特定類型的操作具有不同的效率,選擇那個容器類型,要根據具體的操作選擇。
注意:位于java.util包裡面的接口類幾乎都是非線程安全的,線程安全的集合位于java.util.concurrent包裡面。
Java集合架構中類的組織方式:總接口-->子接口-->抽象類-->具體集合類。在接口中定義行為,在具體的集合類中定義具體操作的實作。
Java集合架構中常用的接口和具體的集合類:Collection接口----Set接口----List接口,Map接口;常用的具體類:ArrayList LinkedList
TreeSet HashSet LinkedHashSet TreeMap HashMap HashTable LinkedHashMap;以及用于周遊集合元素的接口Iterator;用于定義比較
的接口:Comparator和Comparable;以及便利的工具類:Collections和Arrays。

二、Java集合架構中常用接口介紹
1.Collecttion接口:定義了除了Map相關的集合的共性操作:另外其繼承了Iterable接口,繼承其方法:iterator()--Iterator<T>
Collection接口常用方法:
a. boolean add(E e):向集合中添加元素 boolean addAll(Collection<? extends E> c):向該集合中添加另一個集合中的所有元素
b. void clear():清除該集合中的所有元素
c. boolean contains(Object o):判斷集合中是否包含指定對象 boolean containsAll(Collecttion<?> c):判斷集合中是否包含另一個集合
d. boolean equals(Object o):判斷集合是否與指定集合相等 int hashCode():傳回該集合的哈希值
e. boolean isEmpty():判斷集合是否為空 int size():傳回集合中的元素個數
f. Iterator <T> iterator():傳回在該集合中元素進行疊代的疊代器
g.boolean remove(Object o):删除集合中指定的元素 boolean removeAll(Collection<?> c):删除該集合中和指定集合相同的元素
h. boolean retainAll(Collection<?>):保留該集合和指定集合中相同的元素
i. Object[] toArray():傳回包含該集合所有元素的數組 T[] toArray(T[] t):将集合元素放入指定類型的數組,并傳回該數組
注意:判斷包含是根據對象的内容判斷的
1 //必須先調用next()在調用remove();因為指針在元素前面,删除的是指針位置前面的一個元素
2 Iterator<String> it = c.iterator();//疊代集合中的元素
3 while(it.hasNext()){
4 it.next();
5 it.remove();
6 }
2.Iterator接口:定義疊代集合中元素的方法
a. boolean hasNext():判斷集合中是否還有元素
b. E next():傳回集合中的下一個元素
c. boolean remove():删除疊代器上一個疊代的元素
3.List接口:繼承Collection接口序列,元素之間按照加入集合的次序存在先後的次序關系,操作類似于數組,但是長度可變
允許添加相同内容的元素List中的方法增加了許多利用下标進行操作的方法
a. boolean add(int index, E e):在指定的位置添加元素 boolean containsAll(int index, Collecttion<?> c):在指定的位置加入某集合的元素
b. int indexOf(Object o):傳回指定對象在序列中的下标 E get(int index):傳回指定下标的元素 void set(int index, E e):設定指定的位置元素
c.ListIterator listIterator():傳回一個序列疊代器,序列疊代器運作在疊代的時候,進行添加元素,設定元素,同時運作向前向後周遊序列
d.List<E> subList(int fromIndex, int toIndex):傳回該序列的子序列--包含開始,不包含接收下标
3.Set接口:繼承Collection其含義類似數學的集合,集合中不允許存在相同的元素,列印集合的時候是按照随機的順序列印。未定義新的方法。
4.Map接口:存儲的是一組鍵值對,Key-Value,注意key的内容不允許相同,每個Key隻允許映射一個Value。Map常見的方法
a. V put(K key, V value):将一組鍵值對存入Map裡邊,并傳回原來該鍵對應的值
b. Collection<V> values():将該映射關系所有的值放入集合并傳回
c. Set<K> keySet():将此映射關系的所有的值放入一個集合并傳回
d. Set<Map.Entry<k,v>> entrySet():傳回包含該映射關系的集合
e. boolean containsKey(Object key)/containsValue(Object value):判斷包含特定鍵或值
三、集合架構中常用類的介紹
1.ArrayList:是List接口的一種具體的實作,底層是用數組實作的,它和數組的最大的不同就是,數組的長度,會根據需要擴充,在将原來
數組的内容複制到擁有較大容量的新數組裡面,通過這種方式實作動态數組概念。數組的複制是通過System.arrayCopy()實作的,該方法調用
的是本地方法。預設是10,每次擴大先按照1.5倍擴充。ArrayList的特點其實和數組類似,支援随機通路,對于資料量大且要頻繁進行添加和
删除的操作,需要進行頻繁的資料移動。ArrayList在實作疊代的時候定義一個内部類實作Iterator接口,以及另一個更友善的疊代的具體類
内部類,是通過繼承Iterator接口的具體類,并實作ListIterator接口。
2.LinkedList:是List接口的另一種實作,其底層是用雙連結清單實作的,連結清單的特點:對于插入和删除操作很友善隻需要修改幾個指針的指向
對于查找的效率不是特别好。LinkedList的常用方法:主要特殊操作方式是針對頭和尾巴的操作。其實作了List接口、Dequue接口、Queue接口。
add(E e ) addFirst/Last() 以及針對下标的操作類似于ArrayList,getFirst/Last() removeFirst/Last() descendingIterator()--逆序疊代。
3.HashSet:是Set接口的一種實作,其底層實作是連結清單數組實作的,根據對象的哈希值進行劃分。
4.TreeSet:是Set接口的一種實作,底層實作是用的紅黑樹,其最大的特點可以針對元素進行排序之類的操作。
5.HashMap和TreeMap:散列映射對鍵進行散列,樹映射利用鍵的整體順序對元素進行排序,包含許多針對次序相關的操作。