天天看點

Java集合架構總結

一、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集合架構總結

二、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:散列映射對鍵進行散列,樹映射利用鍵的整體順序對元素進行排序,包含許多針對次序相關的操作。