Iterator怎么用,特点是什么

参考答案

1. Iterator的定义

前往查看:迭代器Iterator是什么

2. Iterator接口源码中的方法

  • java.lang.Iterable接口被java.util.Collection接口继承,java.util.Collection 接口的iterator()方法返回一个Iterator对象;
  • next()方法获得集合中的下一个元素;
  • hasNext()检查集合中是否还有元素;
  • remove()方法将迭代器新返回的元素删除;
  • forEachRemaining(Consumer<? super E> action)方法,遍历所有元素。

3. JDK 1.8 源码如下:

//是否有下一个元素
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());
}

4. Iterator使用实例

public class TestIterator {
    
    static List<String> list = new ArrayList<String>();
    
    static {
        list.add("111");
        list.add("222");
        list.add("333");
    }
    
 
    public static void main(String[] args) {
        testIteratorNext();
        System.out.println();
        
        testForEachRemaining();
        System.out.println();
        
        testIteratorRemove();
    }
    
    //使用 hasNext 和 next遍历 
    public static void testIteratorNext() {
        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()) {
            String str = iterator.next();
            System.out.println(str);
        }
    }
    
    //使用 Iterator 删除元素 
    public static void testIteratorRemove() {
        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()) {
            String str = iterator.next();
            if ("222".equals(str)) {
                iterator.remove();
            }
        }
        System.out.println(list);
    }
    
    //使用 forEachRemaining 遍历
    public static void testForEachRemaining() {
        final Iterator<String> iterator = list.iterator();
        iterator.forEachRemaining(new Consumer<String>() {
 
            public void accept(String t) {
                System.out.println(t);
            }
            
        });
    }
}

5. 注意事项

  • 在迭代过程中调用集合的remove(Object o)可能会报 java.util.ConcurrentModificationException异常;
  • forEachRemaining方法中调用Iterator 的 remove 方法会报 java.lang.IllegalStateException异常.
//使用迭代器遍历元素过程中,调用集合的 remove(Object obj) 方法可能会报 java.util.ConcurrentModificationException 异常
public static void testListRevome() {
    ArrayList<String> aList = new ArrayList<String>();
    aList.add("111");
    aList.add("333");
    aList.add("222");
    System.out.println("移除前:"+aList);
     
    Iterator<String> iterator = aList.iterator();
    while(iterator.hasNext()) {
        if("222".equals(iterator.next())) {
            aList.remove("222");          
        }
    }
    System.out.println("移除后:"+aList);
}

//JDK 1.8 Iterator forEachRemaining 方法中 调用Iterator 的 remove 方法会报 java.lang.IllegalStateException 异常
public static void testForEachRemainingIteRemove () {
    final Iterator<String> iterator = list.iterator();
    iterator.forEachRemaining(new Consumer<String>() {

        public void accept(String t) {
            if ("222".equals(t)) {
                iterator.remove();
            }
        }
    });
}

以上,是Java面试题【Iterator怎么用,特点是什么】的参考答案。

输出,是最好的学习方法

欢迎在评论区留下你的问题、笔记或知识点补充~

—end—

 

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧