程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 詳解Java中的迭代迭代器Iterator與列舉器Enumeration

詳解Java中的迭代迭代器Iterator與列舉器Enumeration

編輯:關於JAVA

詳解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事宜。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved