欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

详解Java中的迭代迭代器Iterator与枚举器Enumeration

程序员文章站 2024-03-12 11:34:32
迭代器iterator接口 1.迭代器接口 iterable 内置方法iterator(), 返回一个新建的 iterator。 如: public in...

迭代器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事件。