一、集合的概述
1、集合的由來
java是面向對象的語言,而面向對象語言對事物的描述是通過對象體現的,為了方便對多個對象進行操作,我們就必須把這多個對象進行存儲。而我們要想存儲多個對象,就不能是一個基本的變量,而應該是一個容器類型的變量,而在我們Java的基礎知識里,我們有哪些容器類型的呢?答案是數組和StringBuffer兩種,但是呢?StringBuffer的結果是一個字符串,不一定滿足我們的要求,所以我們只能選擇數組,這就是對象數組。而對象數組又不能適應變化的需求,因為數組的長度是固定的。這個時候,為了適應變化的需求,Java就提供了集合類供我們使用。
2、集合和數組的區別
既然提到了數組和集合,那么我們就說一下集合和數組的區別:
A:長度區別
數組的長度固定
集合的長度可變
B:內容不同
數組存儲的是同一種類型的元素
集合可以存儲不同類型的元素
C:存儲元素的數據類型不同
數組可以存儲基本數據類型,也可以存儲引用數據類型
集合只能存儲引用數據類型
二、Collection集合的框架體系
1、Collection集合體系
Collection集合是單列集合的頂層接口。Collection表示一組對象,這些對象也稱為Collection的元素。該集合的數據結構(簡單記就是數據的存儲方式)對集合元素有效。
Collectoin集合的功能概述:
1)添加功能
boolean add(Object obj):添加功能
boolean addAll(Collection c):添加一個集合的元素
2)刪除功能
void clear():移除所有元素
boolean remove(Object obj):移除一個元素
boolean removeAll(Collection c):移除一個集合的元素(只要有一個元素移除了就返回true)
3)判斷功能
boolean contains(Object obj):判斷集合中是否包含指定的元素
boolean containsAll(Collection c):判斷集合中是否包含指定的集合元素(只有包含指定集合中所有的元素才叫包含)
boolean isEmpty():判斷集合是否為空(指集合的數據元素為空)
4)獲取功能
Iterator iterator():迭代器,集合專有的遍歷方式
5)長度功能
int size():元素的個數
6)交集功能
boolean retainAll(Collection c):兩個集合中都有的元素(假設有兩個集合A、B,A對B做交集,最終的結果保存在集合A中,集合B不變,返回值表示的是集合A是否發生過改變)
7)把集合轉換為數組
Object[] toArray():把集合轉成數組,可以實現集合的遍歷
Collection集合有兩個子接口List和Set。
2、List集合
List集合的特點:有序(指存儲和取出元素的順序一致)、存儲元素可重復
List集合的特有功能:
1)添加功能
void add(int index,Object element):在指定位置添加元素
2)獲取功能
Object get(int index):獲取指定位置的元素
3)列表迭代器
ListIterator listIterator():迭代所有的元素
ListIteraror listIterator(int index):從指定位置開始迭代元素
4)刪除功能
Object remove(int index):根據索引刪除元素,返回被刪除的元素
5)修改功能
Object set(int index,Object element):根據索引修改元素,返回被修改的元素
List集合有ArrayList、Vector和LinkedList三個常用子類。
3、List集合的子類
List集合的子類特點:
ArrayList的底層數據結構是數組,查詢快,增刪慢,線程不安全,效率高
Vector的底層數據結構是數組,查詢快,增刪慢,線程安全,效率低
LinkedList的底層數據結構是鏈表,查詢慢,增刪快。線程不安全,效率高
Vector的特有功能:
1)添加功能
public void addElement(Object obj)
2)獲取功能
public Object elementAt(int index)
public Enumeration elements()
LinkedList的特有功能:
1)添加功能
public void addFirst(Object obj)
public void addLast(Object obj)
2)獲取功能
public Object getFirst()
public Object getLast()
3)刪除功能
public Object removeFirst()
public Object removeLast()
4、Set集合
Set集合的特點:無序(指元素的存儲和取出順序不一致)、存儲元素唯一
Set集合有HashSet和TreeSet兩個常用子類。
5、Set集合的子類
1)HashSet類的特點:
HashSet類不保證Set的迭代順序,特別是它不保證該順序恒久不變。
注意:雖然Set集合的元素是無序的,但是作為集合來說,它肯定有它自己的元素存儲順序。而如果你的順序恰好和它的存儲順序一致,這代表不了有序,你可以多存儲一些數據,看效果。
HashSet類的底層數據結構是哈希表。而哈希表保證元素的唯一性依賴于兩個方法:int hashCode()和boolean equals(Object obj)
用HashSet存儲元素的執行順序:
首先比較hashCode()值是否相同
是:繼續執行equals(),看其返回值
是true:說明元素重復,不添加
是false:就直接添加到集合
否:就直接添加到集合
HashSet類有一個子類LinkedHashSet,LinkedHashSet存儲元素的特點是有序、唯一
LinkedHashSet的底層數據結構由鏈表和哈希表組成,由鏈表保證元素有序,由哈希表保證元素唯一。
2)TreeSet類的特點
TreeSet類底層數據結構是紅黑樹(是一種自平衡的二叉樹)。
TreeSet類如何保證元素唯一性呢?
根據比較的返回值是否是0來決定
TreeSet類如何保證元素的排序呢?
a:自然排序(元素具備比較性)
讓元素所屬的類實現Comparable接口
b:比較器排序(集合具備比較性)
讓集合接收一個Comparator的實現類對象
新聞熱點
疑難解答