List , Set, Queue和Map都是接口,前三個繼承至Collection接口,Map為獨立接口
一 、Collection:
集合的頂層接口,不能被實例化
a) 根接口Collection
i. 常用子接口
1. List
實現類:ArrayList、Vector、LinkedList
2. Set
實現類:HashSet、TreeSet
b) 添加功能
i. boolean add(object obj)添加一個元素
ii. boolean addAll(Collection c)將集合c的全部元素添加到原集合元素后返回true
iii. 添加功能永遠返回true
c) 刪除功能
i. void clear();移除所有元素
ii. boolean remove(Object o)移除一個元素
iii. boolean removeAll(Collection c)移除一個集合的元素,只要有一個被移除就返回true,改變原集合,刪除原集合中和c中相同的元素
iv. 刪除功能只有刪除成功后才返回true
d) 判斷功能
i. boolean contain(object o)判斷集合中是否包含指定的元素。
ii. boolean containsAll(Collection c)判斷原集合中是否包含指定集合c的所有元素,有則true,
iii. boolean isEmpty()判斷集合是否為空
e) 獲取功能
i. Iterator iterator()迭代器,集合的專用方式,實現遍歷的功能
ii. Object next()獲取當前元素,並移動到下一個位置
iii. boolean hasNext()判斷此位置是否有元素
iv. 迭代器遍歷實例在下面
f) 長度功能
i. int size()元素的個數
ii. 數組和字符串中都是length()方法獲取元素個數,集合中是size()方法
因為object包括集合、字符串、數組,所以其不能直接用length方法。
g) 交集功能boolean retainAll(Collection c)
兩個集合交集的元素給原集合,並判斷原集合是否改變,改變則true,不變則false
h) 把集合轉換為數組
i. Object [] toArray()
1、List集合
Collection集合的子類
特點:
a) 有序(存儲和取出的元素順序一致),可重復
b) 特有功能
i. 添加功能
void add(int index,Object element)在指定位置添加元素(原索引處的元素后延)
ii. 獲取功能
Object get(int index)獲取指定位置的元素
iii. 列表迭代器
1. ListIterator listIterator() List集合特有的迭代器
2. Iterator迭代器的子類,所以其可以用Iterator中的boolean hasNext()、Object next()方法
3. 特有的方法:
a) Object previous ()返回此處位置的前一個的元素,並移動到前一個位置。
b) boolean hasPrevious()判斷此處的前一個位置是否有元素
c) 逆向遍歷必須先正向遍歷使指針指到后面位置才能使用(使用意義不大)
4. 迭代器遍歷元素時不能直接通過集合修改元素,怎么辦?
a) 迭代器修改元素
i. List迭代器有修改方法,Collection中的迭代器沒有
ii. 通過迭代器中add(object obj)方法添加,跟在剛才迭代元素后面
b) 通過集合遍歷元素,並用集合修改元素(for循環遍歷)
i. 通過集合中add(object obj)方法添加,跟在集合最后面
5. 迭代器遍歷實例實例在下面給出
iv. 刪除功能
Object remove(int index)根據索引刪除指定的元素,並返回刪除的元素
v. 修改功能、
Object set(int index,Object element)根據索引修改元素,返回被修改的元素
vi. 數組轉成集合
1. public static List asList(T… a),返回類型為List類型
2. a為集合,此處的… 代表可變參數,也就是a的數組元素個數可變
3. 此方法是Arrays類中的靜態方法
4. 數組轉變為集合,實質還是數組需要保證長度不變,所以不支持增刪集合元素,可以修改元素
c) List子類的特點:
i. ArrayList:
1. 底層數據結構是數組,查詢快、增刪慢
2. 線程不安全,效率高
ii. Vector:
1. 底層數據結構是數組,查詢快,增刪慢
2. 線程安全,效率底
iii. LinkedList:
1. 底層數據結構是鏈表,查詢慢,增刪快
2. 線程不安全,效率高
1.1、 Vector集合特有的特點
a) 添加功能
i. public void addElement(Object obj)
b) 獲取功能
i. public Object elementAt(int index)
ii. public Enumeration elements ()
1. 也是用來遍歷集合
2. boolean hasMoreElements()
3. Object nextElement()
4. 基本不用這個,都是直接用上面的迭代器實現遍歷
1.2、LinkedList集合的特有功能
a) 添加功能
i. public void addFirst(Object e)
ii. public void addLast(Object e)
b) 獲取功能
i. public Object getFirst()
ii. public Object getLast()
c) 刪除功能
i. public Object removeFirst()
ii. public Object removeLast()
2、 Set集合
a) 無序(存儲和取出順序不一致,有可能會一致),但是元素唯一,不能重復
b) b) 實現類
i. HashSet
1. 底層數據是哈希表
2. 通過兩個方法hashCode()和equals()保證元素的唯一性,方法自動生成
3. 子類LinkedHashSet底層數據結構是鏈表和哈希表,由鏈表保證元素有序,
由哈希表保證元素唯一。
ii. TreeSet
1. 底層數據是紅黑二叉樹
2. 排序方式:自然排序、比較器排序
3. 通過比較返回值是否為0來保證元素的唯一性。
2.1、 HashSet類:
a) 不保證set的迭代順序,
b) 當存儲對象時需要重寫equals()和hashCode()方法
2.1.1、 LinkedHashSet類
a) HashSet的子類
b) 可預知的迭代順序,底層數據結構由哈希表和鏈表組成
i. 哈希表:保證元素的唯一性
ii. 鏈表:保證元素有序(存儲和取出順序一致)
2.2、 TreeSet類
a) 能夠保證元素唯一性(根據返回值是否是0來決定的),並且按照某種規則排序
i. 自然排序,無參構造方法(元素具備比較性)
按照compareTo()方法排序,讓需要比較的元素所屬的類實現自然排序接口Comparable,
並重寫compareTo()方法
ii. 1. 讓集合的構造方法接收一個比較器接口的子類對象(compareator)
(此處的Comparator為接口,需要寫一個接口實現類,在實現類中重寫compare()方法,
並在這里創建接口實現類的對象,可以用匿名內部類來創建實現類對象)
b) 底層是自平衡二叉樹結構
i. 二叉樹有前序遍歷、后序遍歷、中序遍歷
ii. TreeSet類是按照從根節點開始,按照從左、中、右的原則依此取出元素
c) 當使用無參構造方法,也就是自然排序,需要根據要求重寫compareTo()方法,這個不能自動生成
3.Map
Map:
Map接口有三個比較重要的實現類,分別是HashMap、TreeMap和HashTable。
TreeMap是有序的,HashMap和HashTable是無序的。
Hashtable的方法是同步的,HashMap的方法不是同步的。這是兩者最主要的區別。
這就意味着:
Hashtable是線程安全的,HashMap不是線程安全的。
HashMap效率較高,Hashtable效率較低。
如果對同步性或與遺留代碼的兼容性沒有任何要求,建議使用HashMap。 查看Hashtable的源代碼就可以發現,除構造函數外,Hashtable的所有 public 方法聲明中都有 synchronized關鍵字,而HashMap的源碼中則沒有。
Hashtable不允許null值,HashMap允許null值(key和value都允許)
父類不同:Hashtable的父類是Dictionary,HashMap的父類是AbstractMap
參考鏈接:https://blog.csdn.net/zhangqunshuai/article/details/80660974
https://blog.csdn.net/zfliu96/article/details/83476493