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方法。對集合進行隨機打亂排序。