1. 程式人生 > 其它 >Java筆記:主要包括集合,迭代器,增強for,泛型

Java筆記:主要包括集合,迭代器,增強for,泛型

技術標籤:集合泛型

1. 集合框架

​ 學習集合目標:
​ 1.會使用集合儲存資料
​ 2.會遍歷集合,把資料取出來
​ 3.掌握每種集合的特性
​ 2個介面:
​ List介面:
​ 1.有序的集合(),儲存和取出元素的順序相同
​ 2.允許儲存重複元素
​ 3.有索引,可以使用普遍的for迴圈遍歷
​ Vector集合 ArrayList集合 LinkedList集合
​ Set介面:
​ 1.不允許有重複元素
​ 2.沒有索引下標(不能使用for迴圈遍歷)
​ TreeSet集合 HashSet集合
​ LinkedHahSet(繼承父類HashSet)(有序集合,存和取順序一樣)

		List介面 與 Set介面		向上共性抽取形成Collection介面
	定義的是所有單列集合中共性的方法
	所有的單列集合都可以使用共性的方法
	沒有帶索引的方法
	
	集合框架的的學習方式:
		1.學習頂層。學習頂層介面/抽象類中共性的方法,所有的子類都可以使用。
		2.使用底層。使用底層子類建立物件時用。
	 collection中常用功能(頂層功能):
		public boolean add(E e);	把給定物件新增到當前集合中。
		public void clear();		清空集合中所有元素。
		public boolean remove();	把給定物件在當前集合中刪除。
		public boolean contains();	判斷當前集合中是否包含給定的物件。
		public boolean isEmpty();	判斷當前集合是否為空。
		public int size();			返回集合中元素的個數。
		public Object[] toArray();	把集合中的元素,儲存到陣列中。

2. 迭代器Iterator

​ 迭代:在collection集合元素的通用獲取方式。在取元素之前先要判斷集合中有沒有元素,
​ 如果有,就把這個元素取出來,繼續再判斷,如果還有就再取出來。一直到集合中所有元素全部取出。
​ 這種取出方式叫迭代。
​ Iterator介面中有兩個常用方法:

boolean hasNext();		如果仍有元素可以迭代,返回true;否則返回false。
​			E next();				返回迭代的下一個元素。
​		
​		Iterator迭代器,是一個介面,我們無法直接使用,需要使用Iterator介面的實現類物件。
​			collection方法中有一個方法叫iterator(),
返回的就是Iterator介面的實現類物件。

​ 迭代器的使用步驟【重點】:
​ 1.使用集合中的方法iterator()獲取迭代器的實現類物件。使用Iterator介面接收。(多型)
​ 2.使用Iaterator介面中的hasNext()方法判斷有沒有下一個元素。
​ 3.使用Iaterator介面中的next方法取出集合中的下一個元素。
​ 迭代器Iterator有泛型,迭代器的泛型跟著集合走,集合是什麼泛型,迭代器就是什麼泛型。

3. 增強for迴圈:

​ 用來遍歷集合和陣列
​ 格式:
​ for(集合/陣列資料型別 變數名:集合名/陣列名){
​ sout(變數名);}
​ 【增強for迴圈必須有被遍歷的目標。目標只能是collection或者是陣列。】

4. 泛型:

​ 建立集合物件,使用泛型
​ 好處:
​ 1.避免了型別轉換的麻煩,儲存的是什麼型別,取出的就是什麼型別
​ 2.把執行期異常(程式碼執行之後會丟擲的異常),提升到了編譯器。
​ 弊端:
​ 泛型確定後,就只能儲存那一種資料型別

建立集合物件,不使用泛型:
好處:集合不使用泛型,預設的就是Object型別,可以儲存任意型別的資料。
弊端:不安全,會引發異常。

泛型的定義和使用:
	不確定用什麼資料型別的時候可以使用泛型;
	泛型可以接受任意的資料型別,【建立物件的時候確定泛型的資料型別】。
	
含有泛型的方法:
	泛型定義在方法的修飾符和返回值型別之間
	格式:	
		修飾符	<泛型> 返回值型別 方法名(引數列表 (使用泛型)){
		//...}
	
含有泛型的介面:
	 首先定義含有泛型的介面。和定義含有泛型的類比較像。
	 使用方法2種:
	 1.定義介面的實現類時,確認泛型具體資料型別。(實現介面,指定介面的型別。)
	 2.介面是用什麼泛型,實現類就用什麼泛型,類跟著介面走。
		相當於定義了一個含有泛型的類,建立物件的時候確定泛型。

泛型萬用字元:
	?代表任意資料型別
使用方式:
	不能建立物件使用
	只能作為方法的引數使用。【定義的時候不能用,作為引數傳遞的時候可以用】
		定義一個方法以後,我們不知道方法體中的集合使用什麼資料型別,可以使用泛型萬用字元 ? 來接收資料型別。
		泛型是沒有繼承概念的。
泛型的上限限定,下限限定。
(extends   super    父類   ???)

鬥地主案例:
四部思路。
Collections.shuffle方法。對集合進行隨機打亂排序。