集合-迭代器

7 篇文章 0 订阅

为了方便处理集合中的元素,Java中设置了一个对象,该对象提供了一些方法专门处理集合中的元素,这个对象就叫做迭代器(Iterator)

对Collection进行迭代的类,称其为迭代器,但是该对象比较特殊,不能直接创建对象(通过new),在Collection接口中定义了获取集合类迭代器的方法iterator(),所以所有的Collection体系集合都可以获取自身的迭代器

Iterable是Collection的父接口,该接口中只提供了一个方法,用来返回Iterator对象,所以Collection具备了自身迭代的方法。


package java.lang;

import java.util.Iterator;

/** Implementing this interface allows an object to be the target of
 *  the "foreach" statement.
 * @since 1.5
 */
public interface Iterable<T> {
    Iterator<T> iterator();
}

在Ietrator接口中定义了三个方法

package java.util;
public interface Iterator<E> {
    boolean hasNext();
    E next();
    void remove();
}

boolean hasNext();判断集合中是否有元素,如果元素可以迭代,就返回true。

E next(); 返回迭代的下一个元素,如果没有下一个元素,调用该方法会报异常。

void remove(); 从迭代器指向的集合中移除迭代器返回的最后一个元素。

在集合进行迭代过程中,不允许出现迭代器以外的对象操作。

比如

Iterator it = list.iterator();
		while (it.hasNext()) {
			it.next();
			it.remove();
			list.add("abc"); // 出现了迭代器以外的对元素的操作
		}

因为在迭代过程中出现了迭代器以外对元素的操作,所以会报出异常(java.util.ConcurrentModificationException)。

List特有的迭代器ListIterator

         如果是List集合,向要在迭代中操作元素可以使用List集合的特有迭代器ListIterator,该迭代器支持在迭代过程中,添加元素和修改元素。


package java.util;

public interface ListIterator<E> extends Iterator<E> {
    boolean hasNext();
E next();
void remove();
//-------------------------Iterator子接口List专属的迭代器
    boolean hasPrevious();    
    E previous();
    int nextIndex();
    int previousIndex();
    void set(E e);
    void add(E e);
}

Iterator在迭代是,只能对元素进行获取(next())和删除(remove())操作,而ListIterator在迭代list集合是,还可以对元素进行增加(add)和修改(set)操作。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 25
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值