illegalstateexception是什么异常_Java面试题Iterator怎么使用?有什么特点?

点击上方“千锋Java学院”,选择“置顶公众号

每天一道面试模拟真题及解析

课前导读

●回复"每日一练"获取以前的题目,持续更新!

●我希望大家积极参与!有什么不懂可以加小千微信进行讨论

★把面试准备工作,拆分、融入到平时每天

Iterator怎么使用?有什么特点?

参考答案:

Iterator 接口源码中的方法
  • java.lang.Iterable 接口被 java.util.Collection 接口继承,java.util.Collection 接口的 iterator() 方法返回一个 Iterator 对象
  • next() 方法获得集合中的下一个元素
  • hasNext() 检查集合中是否还有元素
  • remove() 方法将迭代器新返回的元素删除
  • forEachRemaining(Consumer super E> action) 方法,遍历所有元素
  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());}
Iterator 的使用示例:
public class TestIterator {  static List list = new ArrayList();  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 iterator = list.iterator();    while (iterator.hasNext()) {      String str = iterator.next();      System.out.println(str);    }  }  //使用 Iterator 删除元素   public static void testIteratorRemove() {    Iterator 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 iterator = list.iterator();    iterator.forEachRemaining(new Consumer() {      public void accept(String t) {        System.out.println(t);      }    });  }}

注意事项

  • 在迭代过程中调用集合的 remove(Object o) 可能会报 java.util.ConcurrentModificationException 异常

  • forEachRemaining 方法中 调用Iterator 的 remove 方法会报 java.lang.IllegalStateException 异常

//使用迭代器遍历元素过程中,调用集合的 remove(Object obj) 方法可能会报 java.util.ConcurrentModificationException 异常  public static void testListRevome() {     ArrayList aList = new ArrayList();         aList.add("111");         aList.add("333");         aList.add("222");         System.out.println("移除前:"+aList);                  Iterator 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 iterator = list.iterator();    iterator.forEachRemaining(new Consumer() {       public void accept(String t) {        if ("222".equals(t)) {          iterator.remove();        }      }    });  }
db0a82ba19c1e58b80a28d53754a79da.png ▼ 点击 阅读原文 抢预约免费试听课程名额
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值