1. 程式人生 > >集合框架(二)

集合框架(二)

成員 線程 aslist 建議 元素 nds 還得 編譯期 line

List的子類(掌握)

1、List的子類特點

	
		ArrayList:
			底層數據結構是數組,查詢快,增刪慢
			線程不安全,效率高
		Vector:
			底層數據結構是數組,查詢快,增刪慢
			線程安全,效率低
		LinkedList:
			底層數據結構是鏈表,查詢慢,增刪快
			線程不安全,效率高

2、ArrayList

	
		沒有特有功能需要學習

3、Vector

	
		a:添加
				public void addElement(E obj)		--	add()
		b:獲取
				public E elementAt(int index)		--	get()
				public Enumeration elements()	--  iterator()

4、LinkedList

		
			a:添加
				addFirst()
				addLast()
			b:刪除
				removeFirst()
				removeLast()
			c:獲取
				getFirst()
				getLast()

5、案例

		
		A:去除集合中的多個字符串的重復元素
			如果字符串的內容相同,即為重復元素
		B:去除集合中的多個自定義對象的重復元素
			如果自定義對象的成員變量值都相同,即為重復元素
		C:用LinkedList模擬一個棧數據結構的集合類,並測試。
			你要定義一個集合類,只不過內部可以使用LinkedList來實現。

泛型(掌握)

	
	1、泛型概述
		是一種把明確類型的工作推遲到創建對象或者調用方法的時候才去明確的特殊的類型。
	2、格式:
		<數據類型>
		註意:該數據類型只能是引用類型。
	3、好處:
		A:把運行時期的問題提前到了編譯期間
		B:避免了強制類型轉換
		C:優化了程序設計,解決了黃色警告線問題,讓程序更安全
	4、泛型的前世今生
		A:泛型的由來
			Object類型作為任意類型的時候,在向下轉型的時候,會隱含一個轉型問題
		B:泛型類
		C:泛型方法
		D:泛型接口
		E:泛型高級通配符
			?
			? extends E
			? super E
	5、我們在哪裏使用呢?
		一般是在集合中使用。

增強for循環(掌握)

	
	1、是for循環的一種
	2、格式:
		for(元素的數據類型 變量名 : 數組或者Collection集合的對象) {
			使用該變量即可,該變量其實就是數組或者集合中的元素。
		}
	3、利:
		簡化了數組和集合的遍歷
	4、弊:
		增強for循環的目標不能為null。建議在使用前,先判斷是否為null。

靜態導入(了解)

	
	1、如果我們在寫方法的時候,參數個數不明確,就應該定義可變參數。
	2、格式:
		修飾符 返回值類型 方法名(數據類型... 變量) {}
		
		註意:
			A:該變量其實是一個數組名
			B:如果一個方法有多個參數,並且有可變參數,可變參數必須在最後
	3、Arrays工具類的一個方法
		asList()把數組轉成集合。
		註意:這個集合的長度不能改變。

可變參數(掌握)

	
	1、可以導入到方法級別的導入
	2、格式:
		import static 包名....類名.方法名;
	3、註意事項:
		A:方法必須是靜態的
		B:如果多個類下有同名的方法,就不好區分了,還得加上前綴。
			所以一般我們並不使用靜態導入,但是一定要能夠看懂。

Set集合(理解)

1、List的子類特點

	
		Set集合的特點
			無序,唯一

2、HashSet集合(掌握)

	
		A:底層數據結構是哈希表(是一個元素為鏈表的數組)
		B:哈希表底層依賴兩個方法:hashCode()和equals()
		  執行順序:
			首先比較哈希值是否相同
				相同:繼續執行equals()方法
					返回true:元素重復了,不添加
					返回false:直接把元素添加到集合
				不同:就直接把元素添加到集合
		C:如何保證元素唯一性的呢?
			由hashCode()和equals()保證的
		D:開發的時候,代碼非常的簡單,自動生成即可。
		E:HashSet存儲字符串並遍歷
		F:HashSet存儲自定義對象並遍歷(對象的成員變量值相同即為同一個元素)

3、TreeSet集合

	
		A:底層數據結構是紅黑樹(是一個自平衡的二叉樹)
		B:保證元素的排序方式
			a:自然排序(元素具備比較性)
				讓元素所屬的類實現Comparable接口
			b:比較器排序(集合具備比較性)
				讓集合構造方法接收Comparator的實現類對象
		C:把我們講過的代碼看一遍即可

4、案例

		
			鍵盤錄入學生按照總分從高到底輸出

Collection集合總結(掌握)

	
	Collection
		|--List	有序,可重復
			|--ArrayList
				底層數據結構是數組,查詢快,增刪慢。
				線程不安全,效率高
			|--Vector
				底層數據結構是數組,查詢快,增刪慢。
				線程安全,效率低
			|--LinkedList
				底層數據結構是鏈表,查詢慢,增刪快。
				線程不安全,效率高
		|--Set	無序,唯一
			|--HashSet
				底層數據結構是哈希表。
				如何保證元素唯一性的呢?
					依賴兩個方法:hashCode()和equals()
					開發中自動生成這兩個方法即可
				|--LinkedHashSet
					底層數據結構是鏈表和哈希表
					由鏈表保證元素有序
					由哈希表保證元素唯一
			|--TreeSet
				底層數據結構是紅黑樹。
				如何保證元素排序的呢?
					自然排序
					比較器排序
				如何保證元素唯一性的呢?
					根據比較的返回值是否是0來決定

針對Collection集合我們到底使用誰呢?(掌握)

	
	唯一嗎?
		是:Set
			排序嗎?
				是:TreeSet
				否:HashSet
		如果你知道是Set,但是不知道是哪個Set,就用HashSet。
			
		否:List
			要安全嗎?
				是:Vector
				否:ArrayList或者LinkedList
					查詢多:ArrayList
					增刪多:LinkedList
		如果你知道是List,但是不知道是哪個List,就用ArrayList。
	
	如果你知道是Collection集合,但是不知道使用誰,就用ArrayList。
	
	如果你知道用集合,就用ArrayList。

在集合中常見的數據結構(掌握)

	
	ArrayXxx:底層數據結構是數組,查詢快,增刪慢
	LinkedXxx:底層數據結構是鏈表,查詢慢,增刪快
	HashXxx:底層數據結構是哈希表。依賴兩個方法:hashCode()和equals()
	TreeXxx:底層數據結構是二叉樹。兩種方式排序:自然排序和比較器排序

集合框架(二)