詳解Java中的迭代迭代器Iterator與列舉器Enumeration。本站提示廣大學習愛好者:(詳解Java中的迭代迭代器Iterator與列舉器Enumeration)文章只能為提供參考,不一定能成為您想要的結果。以下是詳解Java中的迭代迭代器Iterator與列舉器Enumeration正文
迭代器Iterator接口
1.迭代器接口
Iterable
內置辦法iterator(), 前往一個新建的 Iterator。
如:
public interface Iterable { Iterator Iterator(); }
Iterator 有 hasNext() 和 next() 兩個辦法要完成。 public interface Iterator { boolean hasNext(); Item next(); void remove(); //可選完成 }
2.完成
導入
import java.util.Iterator;
泛型的類, 完成Iterable接口 implements Iterable< Item >
完成Iterable的iterator()辦法, 前往隨意率性界說迭代器類型。
界說迭代器類型 implements Iterator< Item >
完成 hasNext()、 next()、 remove()
3.示例:
public class Stack<Item> implements Iterable<Item> { public Iterator<Item> iterator() { return new ListIterator<Item>(first); } private class ListIterator<Item> implements Iterator<Item> { private Node<Item> current; public ListIterator(Node<Item> first) { current = first; } public boolean hasNext() { return current != null; } public void remove() { throw new UnsupportedOperationException(); } public Item next() { if (!hasNext()) throw new NoSuchElementException(); Item item = current.item; current = current.next; return item; } } }
4.挪用辦法
foreach 迭代
for (String s : stack) System.out.println(s);
假如是 int\double 等根本類型, 請應用之前的轉換關系
5.輪回遍歷
Iterator i = stack.iterator(); while (i.hasNext()) { String s = i.next(); }
列舉器Enumeration接口
Enumeration是java.util中的一個接口類,在Enumeration中封裝了有關列舉數據聚集的辦法,與Iterator差不多,用來遍歷聚集中的元素 然則列舉Enumeration只供給了遍歷Vector和Hashtable類型聚集元素的功效,這類類型的聚集對象經由過程挪用elements()辦法獲得一個Enumeration對象 然後Enumeratino對象再挪用以下辦法來對聚集中的元素停止遍歷。
hasMoreElements():斷定Enumeration對象中能否還稀有據
nextElement():獲得Enumeration對象中的下一個數據
實例以下:
Enumeration req = request.getParameterNames(); while (req.hasMoreElements()) { Object obj = (Object) req.nextElement(); if (obj.toString().trim().equals("LastPage")) { System.out.println("LastPage \n"); } else if (obj.toString().trim().equals("NextPage")) { System.out.println("NextPage"); } }
Iterator和Enumeration差別
在Java聚集中,我們平日都經由過程 “Iterator(迭代器)” 或 “Enumeration(列舉類)” 去遍歷聚集。明天,我們就一路進修一下它們之間究竟有甚麼差別。
我們先看看 Enumeration.java 和 Iterator.java的源碼,再說它們的差別。
Enumeration是一個接口,它的源碼以下:
package java.util; public interface Enumeration<E> { boolean hasMoreElements(); E nextElement(); }
Iterator也是一個接口,它的源碼以下:
package java.util; public interface Iterator<E> { boolean hasNext(); E next(); void remove(); }
看完代碼了,我們再來講說它們之間的差別。
(01) 函數接口分歧
Enumeration只要2個函數接口。經由過程Enumeration,我們只能讀取聚集的數據,而不克不及對數據停止修正。
Iterator只要3個函數接口。Iterator除能讀取聚集的數據以外,也能數據停止刪除操作。
(02) Iterator支撐fail-fast機制,而Enumeration不支撐。
Enumeration 是JDK 1.0添加的接口。應用到它的函數包含Vector、Hashtable等類,這些類都是JDK 1.0中參加的,Enumeration存在的目標就是為它們供給遍歷接口。Enumeration自己並沒有支撐同步,而在Vector、Hashtable完成Enumeration時,添加了同步。
而Iterator 是JDK 1.2才添加的接口,它也是為了HashMap、ArrayList等聚集供給遍歷接口。Iterator是支撐fail-fast機制的:當多個線程對統一個聚集的內容停止操作時,便可能會發生fail-fast事宜。