Java基礎 第三節 第七課
Iterator 介面
在程式開發中, 經常需要遍歷集合中的所有元素. 針對這種需求, JDK 專門提供了一個介面java.util.Iterator
.
概述
Iterator 介面也是 Java 集合中的一員. 但它與 Collection, Map 介面有所不同. Collection 介面與 Map 介面主要用於儲存元素, 而 Iterator 主要用於迭代訪問 (即遍歷) Collection 中的元素. 因此 Iterator 物件也被稱為迭代器.
想要遍歷 Collection 集合, 那麼就要獲取該集合迭代器完成迭代操作. 下面介紹一下獲取攜帶器的方法.
publicIterator iterator():
獲取集合物件的迭代器, 用來遍歷集合中的元素,
迭代的概念
迭代: 即 Collection 集合元素的通用獲取方式.
在取元素之前先要判斷集合中有沒有元素. 如果有, 就把這個元素取出來, 再繼續判斷, 如果還有就再取出來. 一直把集合中的所有元素全部取出. 這種取出方式專業術語稱為迭代.
常用方法
Iterator 介面的常用方法如下:
publicE next()
: 返回迭代的下一個元素publicboolean hasNext()
: 如果仍有元素可以迭代, 則返回 true
程式碼展示
import java.util.Collection;
import java.util.Iterator;
public class Test {
public static void main(String[] args) {
// 使用多型建立物件
Collection<String> collection = new ArrayList<>();
// 新增元素到集合
collection.add("littlewhite");
collection.add("middlewhite");
collection.add("bigwhite");
// 使用迭代器變數
// 獲得迭代器物件
Iterator<String> iterator = collection.iterator();
while (iterator.hasNext()){ // 判斷是否有迭代元素
String temp = iterator.next(); // 獲取迭代出的元素
System.out.println(temp);
}
}
}
輸出結果:
littlewhite
middlewhite
bigwhite
迭代器的實現原理
當遍歷集合時:
- 首先通過呼叫集合的 Iterator() 方法獲得迭代器物件
- 然後使用 hashNext() 方法判斷集合中是否存在下一個元素
- 如果存在, 則呼叫 next() 方法將元素取出. 否則說明已到達了集合末尾, 停止遍歷元素.
Iterator 迭代器物件在遍歷集合時, 內部採用指標的方法來跟蹤集合中的元素:
- 在使用 Iterator 的 next 方法之前, 迭代器的索引位於第一個元素之前, 不指向任何元素
- 當第一次呼叫迭代器的 next 方法後, 迭代器的索引會向後移動一位, 指向第一個元素並將該元素返回
- 當再次呼叫 next 方法時, 迭代器的索引會指向第二個元素並將該元素返回
- 以此類推, 直到 hasNext 方法返回 flase, 表示到達了集合的末尾, 終止對元素的遍歷
增強 for
增強 for 迴圈 (也稱 for each 迴圈) 是 JDK1.5 以後出來的一個高階 for 迴圈, 專門用來遍歷陣列和集合的.
它的內部原理其實是個 Iterator 迭代器. 所以在遍歷的過程中, 不能對集合中的元素進行增刪操作.
格式:
for(元素的資料型別 變數 : Collection 集合 or 陣列){
//寫操作程式碼
}
增強迴圈用於遍歷 Collection 和陣列. 通常只進行遍歷元素, 不要在遍歷的過程中對集合元素進行增刪操作.
練習
練習 1: 遍歷陣列
public class Test {
public static void main(String[] args) {
int[] array = {1,2,3};
// 使用增強for遍歷陣列
for(int temp : array){
// temp 代表陣列中的每個元素
System.out.println(temp);
}
}
}
輸出結果:
1
2
3
練習 2: 遍歷集合
import java.util.ArrayList;
import java.util.Collection;
public class Test27 {
public static void main(String[] args) {
Collection<String> collection = new ArrayList<>();
collection.add("littlewhite");
collection.add("middlewhite");
collection.add("bigwhite");
// 使用增強for遍歷
for(String temp : collection){
System.out.println(temp);
}
}
}
輸出結果:
littlewhite
middlewhite
bigwhite
注: 新 for 迴圈必須有被遍歷的目標. 目標只能是 Collection 或者是陣列. 新式 for 僅僅作為遍歷操作出現.
相關文章
- Java基礎 第三節 第五課Java
- Java基礎 第三節 第六課Java
- Java基礎 第三節 第一課Java
- Java基礎 第二節 第三課Java
- Java基礎 第三節 第十課Java
- Java基礎 第三節 第二十課Java
- Java基礎 第一節 第八課Java
- Java基礎 第二節 第十課Java
- ARM第一節基礎課
- Java基礎 第二節 第二十一課Java
- 機器學習進階 第一節 第七課機器學習
- java基礎第二季最後一節課練習Java
- android基礎學習-java篇day7-step3-第三節:java字串AndroidJava字串
- Spark修煉之道(基礎篇)——Linux大資料開發基礎:第七節:程式管理SparkLinux大資料
- 老王的JAVA基礎課:第5課 物件導向Java物件
- Java基礎程式碼季節判斷季節1Java
- Java第七課. 物件導向特徵2Java物件特徵
- 第七章-類基礎
- 基礎課程
- 初等數學O 集合論基礎 第三節 序關係
- Python基礎(二十):物件導向“類”第三課——類成員Python物件
- 開課吧Java課堂:小應用程式基礎是什麼Java
- iOS基礎細節iOS
- SOAP 節點基礎
- Java基礎回顧(牛客網專案課程)Java
- java基礎一些演算法(第三篇)Java演算法
- 第一章-JAVA基礎-課後總結和課後習題Java
- java培訓(1-4節課)Java
- java培訓(5-8節課)Java
- 基礎課程之遊戲學遊戲
- 圖觀™應用編輯器 零基礎入門課(第三講)
- Spark修煉之道(基礎篇)——Linux大資料開發基礎:第三節:使用者和組SparkLinux大資料
- JS基礎學習第七天JS
- Linux大資料開發基礎:第三節:使用者和組Linux大資料
- 第七課 C變數變數
- 零基礎學Java第四節(字串相關類)Java字串
- 零基礎學Java第六節(物件導向二)Java物件
- Python–Redis實戰:第三章:Redis命令:第七節:其他命令PythonRedis