4.Iterator迭代器
目錄
4.Iterator迭代器
4.1.什麼是迭代
迭代:即Collection集合元素的通用獲取方式。在取元素之前先判斷集合中有沒有元素,如果有,就把元素取出來,然後繼續再判斷,如果還有就再取出,一直把集合中所有元素全部取出。這種取出方式專業術語稱為迭代。
4.2.Iterator主要功能是什麼
1.在程式開發中,經常需要遍歷集合中的所有元素。針對這種需求,jDK專門提供了一個
介面java.util.Iterator. Iterator介面也是java集合中的一員,但它與Collection、Map介面有所不同,Collection介面和map介面主要用於儲存元素,而Iterator主要用於迭代訪問(即遍歷)Collection集合元素,因此Iterator物件也被稱為迭代器。
2.簡單說,就是通用的取出集合中所有元素的一個介面,適用於任何集合。
3.Iterator迭代器:是一個介面,我們無法直接使用,需要使用Iterator介面的實現類物件。
4.3.Iterator介面中常用方法有哪些
1.public E next():返回迭代的下一個元素(取出集合中的下一個元素)
2.public boolean hasNext():如果仍有元素可以迭代,則返回true 。3.Iterator迭代器:是一個介面,我們無法直接使用,需要使用Iterator介面的實現類物件,獲取實現類的方式比較特殊,Collection介面中有一個方法叫iterator(),這個方法返回的就是迭代器的實現類物件。並使用Iterator介面接收(多型寫法)。
4.迭代器物件獲取方法:Iterator<E>iterator():返回迭代器(物件).
4.4.迭代器的使用步驟
1.通過Collection集合中的方法iterator()獲取迭代器的實現類物件,並使用Iterator介面接收。
(介面指向實現類物件,這就是用多型建立一個介面物件的方式)
2.使用Iterator介面中的方法hasNext判斷還有沒有下一個元素。
3.使用Iterator介面中的方法next取出集合中的下一個元素。public class IteratorDemo1 { public static void main(String[] args) { //建立一個(Collection)集合物件(用多型的方式:介面指向實現類物件) Collection<String>coll=new ArrayList<>(); //往集合中新增元素 coll.add("姚明"); coll.add("科比"); coll.add("麥迪"); coll.add("詹姆斯"); coll.add("艾弗森"); //Collection集合沒有索引,不能遍歷,下面使用迭代器取出所有元素 /** * 1.使用集合中的方法iterator()獲取迭代器的實現類物件, * 使用Iterator介面接收(多型) * 注意:Iterator<E>介面也是有泛型的,迭代器泛型與集合泛型是一致的。 */ Iterator<String> it=coll.iterator(); //介面指向其實現類的物件(多型) // 2.使用Iterator介面中的方法hasNext判斷還有沒有下一個元素 while(it.hasNext()){ // 3.使用Iterator介面中的方法next取出集合中的下一個元素 String next = it.next(); System.out.println(next); } } }
4.5.迭代器實現原理
1.coll.iterator()獲取迭代器的實現類物件,並且把指標(索引)指向集合的-1索引。
2.it.hasNext()判斷集合還有沒有下一個元素
3.it.next()取出下一個元素,並把指標後移一位當遍歷集合時,首先通過呼叫集合的iterator()方法獲得迭代器物件,然後使用hashNext()方法判斷集合中是否存在下一個元素,如果存在,則呼叫next()方法將元素取出,否則說明已到達了集合末尾,停止遍歷元素。Iterator迭代器物件在遍歷集合時,內部採用指標的方式來跟蹤集合中的元素,接下來通過一個圖例來演示Iterator物件迭代元素的過程。在呼叫Iterator的next方法之前,迭代器的索引位於第一個元素之前,不指向任何元素,當第一次呼叫迭代器的next方法後,迭代器的索引會向後移動一位,指向第一個元素並將該元素返回,當再次呼叫next方法時,迭代器的索引會指向第二個元素並將該元素返回,依此類推,直到hasNext方法返回false,表示到達了集合的末尾,終止對元素的遍歷
4.6.增強for迴圈的產生和內部原理
增強for迴圈(也稱for each迴圈),
1.增強for迴圈功能:是JDK1.5以後出來的高階for迴圈,專門用來遍歷陣列和集合。簡化(替代)迭代器來遍歷集合。
2.內部原理:(底層)其實是個Iterator迭代器,使用for迴圈的格式,簡化了迭代器的書寫。所以在遍歷過程中,不能對集合中的元素進行增刪改。
2.格式:for(元素的資料型別 變數:Collection集合or陣列){...... }
3.public interface Iterable<T>實現這個介面,允許物件成為foreach語句的目標。
4.Collection<E>extends Iterable<E>:由於Collection集合繼承了Iterable介面,所以,所有集合都可以作為foreach語句的目標,對集合進行遍歷。
5.增強for迴圈快捷鍵:集合或陣列名.for+enter
6.注意事項:新for迴圈必須有被遍歷的目標,目標只能是Collection(集合)或陣列。新for迴圈僅僅作為遍歷操作出現。
7.總之,增強for迴圈專門用來遍歷陣列和集合,public class foreach { public static void main(String[] args) { demo01(); demo02(); } //增強for迴圈遍歷陣列 private static void demo01(){ int[] arr={1,2,3,4,5}; for (int i : arr) { System.out.println(i); } } //增強for迴圈遍歷集合 private static void demo02(){ ArrayList<String> list=new ArrayList<>(); list.add("aaa"); list.add("bbb"); list.add("ccc"); list.add("ddd"); for (String s : list) { System.out.println(s); } } }