美文网首页
Java集合框架之迭代器(Iterator)

Java集合框架之迭代器(Iterator)

作者: Tinyspot | 来源:发表于2024-01-01 17:51 被阅读0次

1. Iterator 接口

public interface Iterator<E> {

    boolean hasNext();

    E next();

    default void remove() {
        throw new UnsupportedOperationException("remove");
    }

    default void forEachRemaining(Consumer<? super E> action) {
        Objects.requireNonNull(action);
        while (hasNext())
            action.accept(next());
    }
}

1.1 Iterator遍历

@Test
public void test() {
    List<String> list = new ArrayList<>();
    list.add("111");
    list.add("222");
    list.add("333");

    Iterator<String> iterator = list.iterator();
    while (iterator.hasNext()) {
        String next = iterator.next();
    }
}

多层遍历

@Test
public void test() {
    Map<Long, Set<String>> map = new HashMap<>();
    map.put(1001L, new HashSet<>(Arrays.asList("aaa", "bbb")));
    map.put(1002L, new HashSet<>(Arrays.asList("ccc")));

    // Iterator<Set<String>> iterator = map.values().iterator();
    String next = map.values().iterator().next().iterator().next();
    // 输出 next: aaa
}

1.2 遍历时注意事项

迭代过程中不能进行删除、添加操作,会抛异常java.util.ConcurrentModificationException

@Test
public void test() {
    List<String> list = new ArrayList<>();
    list.add("111");
    list.add("222");
    list.add("333");

    for (String str : list) {
        if ("111".equals(str)) {
            list.remove("111");
            // list.add("444");
        }
    }
}

报错原因:

private class Itr implements Iterator<E> {
    final void checkForComodification() {
        if (modCount != expectedModCount)
            throw new ConcurrentModificationException();
    }
}

改为iterator.remove()

Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    if ("111".equals(iterator.next())) {
        iterator.remove();
    }
}

2. Iterable 接口

public interface Iterable<T> {

    Iterator<T> iterator();

    default void forEach(Consumer<? super T> action) {
        Objects.requireNonNull(action);
        for (T t : this) {
            action.accept(t);
        }
    }
}

实现 Iterable 接口,就拥有了获取迭代器的能力

2.1 集合里的迭代器

Collection 继承了 Iterable 接口

public interface Collection<E> extends Iterable<E> {
    Iterator<E> iterator();
}
public interface List<E> extends Collection<E> {
    Iterator<E> iterator();
}
public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable {

    public Iterator<E> iterator() {
        return new Itr();
    }

    // 内部类实现了 Iterator
    private class Itr implements Iterator<E> {
        public boolean hasNext() {}

        public E next() {}

        public void remove() {}
    }

}

2.2 Iterable 存在的意义

解耦,有些集合有多个 Iterator 内部类,可以获取不同的 Iterator 执行不一样的操作,比如ArrayList,LinkedList

public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable {

    public ListIterator<E> listIterator() {
        return new ListItr(0);
    }

    public Iterator<E> iterator() {
        return new Itr();
    }

    private class Itr implements Iterator<E> {}

    private class ListItr extends Itr implements ListIterator<E> {}
}

相关文章

  • JAVA简答(二)

    15 . Java集合类框架的基本接口有哪些? 什么是迭代器(Iterator)? 定义:迭代器是一种设计模式,它...

  • Iterator迭代器

    前言: Java中的Iterator迭代器是为了对集合进行迭代 迭代器的使用:

  • Java使用for和迭代器Iterator中remove比较

    1. Iterator介绍   对于java中的集合类(Collection),可以使用迭代器Iterator对集...

  • 集合

    Java集合框架 将集合的接口与实现分离 队列通常有两种实现形式:循环数组和链表 迭代器 Iterator接口的r...

  • 集合

    集合框架 迭代器 :Iterator 泛型机制 集合操作——线性表 Collections.sort()方法的调用...

  • 使用迭代器遍历集合的两种方式

    使用迭代器Iterator遍历集合 先转换为数组在遍历集合,这种方式比较麻烦,java提供了一个Iterator的...

  • Java Collection集合遍历运行代码实例

    Iterator : 迭代器,集合的专用遍历方式Iterator iterator() : 返回此集合中元...

  • java集合分类

    java的集合主要分为List列表、Set集合、工具类(Iterator迭代器、Enumeration枚举类、Ar...

  • 集合详解

    Iterator:迭代器,它是Java集合的顶层接口(不包括 map 系列的集合,Map接口 是 map 系列集合...

  • ListIterator和Iterator区别

    在使用java集合的时候,都需要使用Iterator。但是java集合中还有一个迭代器ListIterator,在...

网友评论

      本文标题:Java集合框架之迭代器(Iterator)

      本文链接:https://www.haomeiwen.com/subject/rpbundtx.html