單列集合Colleation、List、Set及其子類

單列集合Colleation、List、Set及其子類

單列集合的頂級父類是Colleation接口、它下面又分爲兩派List集合和Set集合,List集合下又有兩個實現類比較常用分別是LinkedList、ArrayList,Set集合下又有三個實現類比較常用分別是HashSet、LinkedHashSet、TreeSet集合。
在這裏插入圖片描述
這篇文章主要來說單列集合、也就是紅色框框標註的。

一:Colleation集合

Collection是所有單列集合的父接口,因此在Collection中定義了單列集合(List和Set)通用的一些方法,這些方法可用於操作所有的單列集合。

注意:Colleation沒有索引的概念

創建方式:創建Colleation對象要new它的實現類才能進行操作

Collection<String> col = new ArrayList<>();

方法如下:

public boolean add(E e) : 把給定的對象添加到當前集合中 。
public void clear() : 清空集合中所有的元素。
public boolean remove(E e) : 把給定的對象在當前集合中刪除。
public boolean contains(Object obj) : 判斷當前集合中是否包含給定的對象。
public boolean isEmpty() : 判斷當前集合是否爲空。
public int size() : 返回集合中元素的個數。
public Object[] toArray() : 把集合中的元素,存儲到數組中

		Collection<String> col = new ArrayList<>();
		//add(E e) 往集合中添加元素	
		col.add("JavaEE");
        col.add("Oracle");
        col.add("MySQL");
        col.add("Java");
     	//因爲集合中重寫了toString方法所以直接輸出集合就可以看到元素
     	System.out.print(col + " ");
     	//輸出結果:[JavaEE Oracle MySQL Java]
		
		//remove(E e)  刪除指定元素	
		col.remove("MySQL");
		System.out.print(col + " ");
		//輸出結果:[JavaEE Oracle Java]

		//contains(Object obj) 判斷當前集合是否包含指定對象	包含返回true不包含返回false
		boolean flag = col.contains("Java"); 
		System.out.print(flag);	
		//輸出結果:true

		//isEmpty() 判斷集合是否爲空 
		boolean flag1 = col.isEmpty();
		System.out.print(flag1);	
		//輸出結果:false

		//size() 返回當前集合中的元素
		int count = col.size();
		System.out.print(count );
		//輸出結果:3

		//toArray() 把當前集合轉換爲數組
		Objeat[] objs = col.toArray();
		System.out.print(Arrays.toString(objs) );
		//輸出結果:[JavaEE, Oracle, Java]

		//clear() 清空集合中所有元素 	
		col.clear();
		System.out.print(col);
		//輸出結果:[] 

二:List集合和Set集合

區別:

 List集合是有序可重複的,這裏所說的有序是指存進去的順序和取出來的順序是一致的,有索引。
 Set集合是無序不可重複的,無索引。

List集合下面分爲ArrayList和LinkedList他們都具備List有序可重複的特點
ArrayList:底層數據結構是數組、它的特點是查詢快、增刪慢
LinkedList:底層數據結構是雙向鏈表、它的特點是查詢慢、增刪快

使用場景:如果涉及查詢的業務邏輯較多就用ArrayList、如果涉及頻繁的修改首尾的操作就用LinkedList

LinkedList的特有方法:
LinkedList是List的子類,List中的方法LinkedList都是可以使用,這裏就不做詳細介紹,我們只需要瞭解LinkedList的特有方法即可。在開發時,LinkedList集合也可以作爲堆棧,隊列的結構使用

public void addFirst(E e) :將指定元素插入此列表的開頭。
public void addLast(E e) :將指定元素添加到此列表的結尾。
public E getFirst() :返回此列表的第一個元素。
public E getLast() :返回此列表的最後一個元素。
public E removeFirst() :移除並返回此列表的第一個元素。
public E removeLast() :移除並返回此列表的最後一個元素。
public E pop() :從此列表所表示的堆棧處彈出一個元素。
public void push(E e) :將元素推入此列表所表示的堆棧。
public boolean isEmpty() :如果列表不包含元素,則返回true

Set集合下面分爲HashSet和LinkedHashSet和TreeSet他們都具備Set無序不可重複的特點

HashSet:底層原理是哈希表 jdk1.8以後是 數組+鏈表+紅黑樹
存儲機制:
哈希表存入數據的圖,數組分16個,然後根據hash值(取模)%16往數組裏面存,如果存入的同一地方多於一個,那就建立鏈表墜在下面,鏈表長度大於8,就開始建立紅黑樹進行存儲。
在這裏插入圖片描述
HashSet確保數據唯一性的依據是,先比較hashCode值,如果不一樣就直接存儲,如果一樣就會再次使用equals進行值的比較,如果一樣就捨棄、證明元素重複,如果不一樣就以鏈表形式存儲。
如果要存儲自定義類型,要確保唯一性的話,要重寫hashCode和equals方法。
HashSet 構造函數有加載因子,爲0.75,存儲到達百分之75,自動擴容 2倍

LinkedHashSet:底層原理是 鏈表+哈希表 它繼承了HashSet
特點:存儲是有序的。其他方法都差不多,請參見API

TreeSet:底層原理是 紅黑樹
作用:使用元素的自然排序規則,對集合中的元素進行排序(內容會使用Comparator比較器進行的默認的升序)
構造:
無參:TreeSet():->進行默認的排序
有參:TreeSet(Comparator<? super E> comparator) ->指定排序規則

所有集合子類都具有父類的特點,所以父類具有的特點子類都有,每個不同的子類都有自己的特點,根據不同的場景使用不同的集合。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章