集合體系結構
-
List系列集合:添加的元素有序,可重復,有索引
-
Collection:是單列集合的祖宗介面,它的功能是全部單列集合都可以繼承使用的
-
set系列集合:添加的元素無序,不重復,無索引
| 方法名 | 說明 |
|---|---|
| public boolean add(E e) | 把給定的物件添加到當前集合中 |
| public void clear() | 清空集合中所有的元素 |
| public boolean remove(E e) | 把給定物件在當前集合中洗掉 |
| public contains(Object obj) | 判斷當前集合中是否包含給定物件 |
| public boolean isEmpty() | 判斷當前集合是否為空 |
| public int size() | 回傳集合中元素的個數/集合長度 |
Collection遍歷
迭代器遍歷
迭代器在java中的類是iterator,迭代器是集合專用的遍歷方式
Collection集合獲取迭代器
Iterator< E > iterator() 回傳迭代器物件,默認指向當前集合的0索引
Iterator中的常用方法
| 方法 | 說明 |
|---|---|
| boolean hasNest() | 判斷當前位置是否有元素,有元素回傳true,沒有回傳false |
| E next() | 獲取當前位置的元素,并將迭代器物件移向下一個位置 |
-
迭代器遍歷完畢,指標不會復位
-
回圈中只能用一次next方法
-
迭代器遍歷時,不能用集合的方法,進行增加或洗掉
-
如果當前位置沒有元素,還要強行獲取,會報NosuchElementException
增強for遍歷
-
增強for的底層就是迭代器,為了簡化迭代器的代碼書寫的
-
它是JDK5之后出現的,其內部原理是一個lterator迭代器
-
所有的單列集合和陣列才能用增強for遍歷
格式:
for(元素的資料型別 變數名: 陣列或集合 ){
}
for(String s : list){
}
s就是一個第三方變數,在回圈程序中 以此表示集合中的每一個資料
Lambda運算式遍歷
default void forEach(consumer<? super T > action):
List集合
List集合的特有方法
Collection的方法List都繼承了
List集合因為有索引,所以多了很多索引的操作方法
| 方法 | 說明 |
|---|---|
| viod add(int index,E element) | 在指定位置插入指定元素 |
| E remove(int index) | 洗掉指定索引的元素,回傳被洗掉的元素 |
| E set(int index,E element) | 修改指定索引的元素,回傳被修改的元素 |
| E get(int index) | 回傳指定元素 |
List集合的遍歷方式
-
迭代器:遍歷程序中需要洗掉元素
-
串列迭代器:遍歷程序中需要添加元素
-
增強for(僅僅想遍歷)
-
Lambda(僅僅想遍歷)
-
普通for:遍歷時想操作索引
資料結構
計算機底部儲存,組織資料方式
堆疊:后進后出,先進先出
資料進入堆疊模型的程序稱為:壓/進堆疊
資料離開堆疊模型的程序稱為:彈/出堆疊
佇列:先進先出,后進后出
陣列:
-
查詢速度快:查詢資料通過地址值和索引定位,查詢任意資料耗時相同(元素在記憶體中是連續儲存的)
-
洗掉效率低:要將原始資料洗掉,同時后面每個資料前移
-
添加效率低:添加位置后的每個資料后移,再添加元素
鏈表
鏈表中的節點是獨立的物件,在記憶體中是不連續的,每個結點包含資料值和下一個結點的地址
鏈表查詢資料慢,無論查詢哪個資料都要從頭開始找
鏈表增刪相對快
LinkedList集合:雙鏈表,查詢慢,首尾操作極快,
泛型深入
泛型是JDK5引入的特性,可以在編譯階段約束操作的資料型別并進行檢查
泛型的格式:<資料型別>
注意:反省只能支持參考資料型別
好處:
-
統一資料型別
-
把運行時期的問題提前到了編譯時期,避免了強制型別轉換可能出現的例外,因為在編譯階段型別就能確定下來
細節:
-
泛型中不能寫基本資料型別
-
指定泛型的具體型別后,傳遞資料時,可以傳入該型別或子型別別
-
如果不寫泛型,型別默認是Object
方法中形參型別不確定時
-
可以使用類名后面定義的泛型< E > 所有方法可用
-
可以在方法中申明上定義自己的泛型< E >只有本方法可用
泛型介面的使用方式:
-
實作類給出具體的型別
-
實作類延續泛型,創建實作類物件時再確定型別
泛型的通配符
反省不具備繼承性,但資料具備繼承性
?表示不確定型別
? extends E:表示可以傳遞E或者E的所有子型別別
? super E :可以傳遞E或E所有父型別別
應有場景
-
如果我們在定義類,方法,介面的時候,如果型別無法確定,就可以定義泛型類,泛型方法,泛型介面
-
如果型別不確定,但是能知道以后只能傳遞某個繼承體系中的,就可以用泛型的通配符
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/555487.html
標籤:Java
下一篇:返回列表
