java集合Iterator接口

40次阅读

共计 1154 个字符,预计需要花费 3 分钟才能阅读完成。

    上一篇文章中我在集合元素的遍历中已经有涉及到 Iterator 的普遍使用方法,但是并没有对此进行解释。
    其实,Iterator 来源于 java.util 包,也是属于 Java 集合框架中的一份子,不同于 Collection(存放单一数据)和 Map(存放具有映射关系的数据),Iterator 主要用于集合元素的迭代输出,所以它的对象又被称为迭代器。

    Iterator 的方法包括:

表头 表头
boolean hasNext(); 判断迭代器是否还有未遍历的元素
E next(); 返回迭代器中下一未遍历元素
void remove(); 移除迭代器上一遍历的元素
void forEachRemaining(Consumer action) 以特定的 Lambda 表达式遍历元素

注:void forEachRemaining(Consumer action) 为 Java 8 新增的默认方法。

    下面是 Iterator 的实例化以及各方法的使用方法

  • Iterator 的实例化
Iterator it=c5.iterator();

    Iterator 本身不存在容纳对象的能力,它的对象必须依附于 Collection 对象。
同时,一个 Iterator 对象只能使用一次,复用会导致 java.util.ConcurrentModificationException。我还没搞懂为什么会这样,应该是关于设计模式的内容。

  • boolean hasNext(); 以及 next();
while(it.hasNext()) {System.out.println(it.next());
}
 输出:5
  • void remove();
while(it.hasNext()) {System.out.println(it.next());
    it.remove();}
 输出:5

    remove 方法要在 next 方法之后调用,次序调换会导致 java.lang.IllegalStateException

  • void forEachRemaining(Consumer action);
Iterator it=c5.iterator();
it.forEachRemaining(obj->System.out.println(obj));
 输出:5

    通过特定的 Lambda 表达式格式输出元素。

     Iterator 接口就写到这里了。通常我都是用它作为测试 Collection 对象的,好处就是不用通过循环遍历,代码量会少一点。但是正式使用我还是会使用循环遍历 Collection 对象,虽则代码量多,但是可以省掉一个对象的内存空间,能省一点是一点,哈哈!

    如果你还想了解关于 java 集合的内容,欢迎点击 https://segmentfault.com/a/1190000019071471

正文完
 0