当前位置: 移动技术网 > IT编程>开发语言>Java > 详解Java中的迭代迭代器Iterator与枚举器Enumeration

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

2019年07月22日  | 移动技术网IT编程  | 我要评论

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网