【java】【集合】迭代器Iterator

love_Aym發表於2018-04-24

集合是用來儲存元素,儲存的元素需要檢視,那麼就需要迭代(遍歷) 

collection介面有個iterator()方法,返回迭代器Iterator介面。

    public Iterator iterator()

Iterator介面中有三個方法:

  • boolean hasNext():如果仍有元素可以迭代,則返回true
  • Object Next():返回迭代的下一個元素
  • void remove():從迭代器只想的collection中一處迭代器返回的最後一個元素(可選操作)。
Collection c = new ArrayList();
c.add("a");
c.add("b");
c.add("c");
c.add("d");
			
Iterator it = c.iterator();		//獲取迭代器的引用
while(it.hasNext()) {			//集合中的迭代方法(遍歷)
    System.out.println(it.next());
}
Collection c = new ArrayList();
c.add(new Student("張三", 23));	    //Object obj = new Student("張三",23);
c.add(new Student("李四", 24));
c.add(new Student("王五", 25));
c.add(new Student("趙六", 26));
		
		//獲取迭代器
Iterator it = c.iterator();
while(it.hasNext()) {
    //System.out.println(it.next());
    Student s = (Student)it.next();	//向下轉型
    System.out.println(s.getName() + "..." + s.getAge());
}

注意:只要碰到了集合輸出的操作,就一定要使用Iterator介面,因為這是最標準的做法。


1、迭代器原理

    迭代器是對集合進行遍歷,而每都一個集合內部的儲存結構是不同的,所以每一個集合存和取都是不一樣,那麼就需要在每一個類中定義hasNext()和next()方法,這樣做是可以的,但是會讓整個集合體系過於臃腫,迭代器是將這樣的方法向上抽取出介面,然後在每個類的內部,定義自己迭代方式,這樣做的好處有二,第一規定了整個集合體系的遍歷方式都是hasNext()和next()方法,第二,程式碼有底層內部實現,使用者不用管怎麼實現的,會用即可

2、迭代器原始碼解析

    * 1,在eclipse中ctrl + shift + t找到ArrayList類

    * 2,ctrl+o查詢iterator()方法

    * 3,檢視返回值型別是new Itr(),說明Itr這個類實現Iterator介面

    * 4,查詢Itr這個內部類,發現重寫了Iterator中的所有抽象方法




相關文章