日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

迭代器的原理

發布時間:2024/1/18 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 迭代器的原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Iterator(迭代器)<E> 接口:

? ? ? ? ? ? ? ? ? ? ? ?所屬包:java.util

? ? ? 成員方法:

? ? ? ? ? ? ? ? ? ? ? ? ? ? E? next ( ); //獲取下一個元素

? ? ? ? ? ? ? ? ? ? ? ? ? ? boolean hasNext ( );? ? // 判斷是否有元素,有true,沒有false

? ? ? ? ? ? ? ? ? ? ? ? ? ?void remove( );? ? ?//獲取誰,刪除誰

例子:

import java.util.ArrayList; import java.util.Iterator;public class test01 {public static void main(String[] args) {ArrayList<Integer> list =new ArrayList<>();list.add(111);list.add(222);list.add(25);Iterator<Integer> it = list.iterator();while(it.hasNext()) {Integer next = it.next();System.out.println(next);}} }

注意: 1.通過迭代器遍歷集合的失敗,不能通過集合對象增刪元素

? ? ? ? ? ? 2.如果要刪除元素可以通過迭代器對象刪除

增強for循環:

? ? ? ? ? ? ?語法: for(數據類型 對象名 : 要遍歷的集合名稱){

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //對象名就是我們獲取元素

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//數據類型寫接口的泛型

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?}

例子:

ArrayList<Integer> list =new ArrayList<>();list.add(111);list.add(222);list.add(25);for (Integer i : list) {System.out.println(i); }

?增強for循環: 遍歷集合的時候,底層就是迭代器

?迭代器實現原理:

我們看下java Collection中迭代器是怎樣實現的

//迭代器角色,僅僅定義遍歷集合接口

public interface Iterator<E> {boolean hasNext();E next();void remove();}

?ArrayList類的iterator方法:

public class ArrayList<E> extends AbstractList<E>{public Iterator<E> iterator() {return new Itr();} }

?簡述ArrayList迭代器的實現原理

class ArrayList<E>{//成員變量private int size;//記錄元素個數private Object[] elementData;//集合底層用來保存元素的數組//成員 內部類 private class Itr implements Iterator<E>{ //成員內部類的成員方法int cursor; // index of next element to returnint lastRet = -1; // index of last element returned; -1 if no suchint expectedModCount = modCount;Itr() {}//判斷是否有元素public boolean hasNext() {//成員內部類變量和外部成員變量進行比較return cursor != size;}@SuppressWarnings("unchecked")//獲取下一個元素public E next() {checkForComodification();//把成員內部類成員變量賦給iint i = cursor;//在于Size進行比較if (i >= size)throw new NoSuchElementException();//ArrayList.this.elementData :如果成員內部類的成員方法和外部類成員方法同名// 外部類.this.外部類成員方法(訪問外部類的成員方法)Object[] elementData = ArrayList.this.elementData;//賦給外部成員變elelmentdata數組if (i >= elementData.length)throw new ConcurrentModificationException();//給i+1賦給cursorcursor = i + 1;return (E) elementData[lastRet = i];//相當于返回給數組的索引值加1}

對ArrayList迭代器原理的主要的表達:

//ArrayList迭代器主要核心 class ArrayList<E>{//成員變量private int size;//記錄元素個數private Object[] elementData;//集合底層用來保存元素的數組//成員 內部類private class Itr implements Iterator<E> {//成員內部類的成員變量private int cursor;public boolean hasNext(){return cursor!=size;}public E next(){return (E)elementData[cursor++];}}}

?

總結

以上是生活随笔為你收集整理的迭代器的原理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。