迭代器的原理
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++];}}}?
總結
- 上一篇: 数据分析报告怎么写?掌握这几个步骤轻松实
- 下一篇: 四国军棋之关门吓司令