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

Iterator 接口源码中的方法

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

 

JDK 1.8 源码如下:

  1. //是否有下一个元素
  2. boolean hasNext();
  3. //下一个元素
  4. E next();
  5. //从迭代器指向的集合中删除迭代器返回的最后一个元素
  6. default void remove() {
  7. throw new UnsupportedOperationException("remove");
  8. }
  9. //遍历所有元素
  10. default void forEachRemaining(Consumer<? super E> action) {
  11. Objects.requireNonNull(action);
  12. while (hasNext())
  13. action.accept(next());
  14. }

 

Iterator 的使用示例

  1. public class TestIterator {
  2. static List<String> list = new ArrayList<String>();
  3. static {
  4. list.add("111");
  5. list.add("222");
  6. list.add("333");
  7. }
  8. public static void main(String[] args) {
  9. testIteratorNext();
  10. System.out.println();
  11. testForEachRemaining();
  12. System.out.println();
  13. testIteratorRemove();
  14. }
  15. //使用 hasNext 和 next遍历
  16. public static void testIteratorNext() {
  17. Iterator<String> iterator = list.iterator();
  18. while (iterator.hasNext()) {
  19. String str = iterator.next();
  20. System.out.println(str);
  21. }
  22. }
  23. //使用 Iterator 删除元素
  24. public static void testIteratorRemove() {
  25. Iterator<String> iterator = list.iterator();
  26. while (iterator.hasNext()) {
  27. String str = iterator.next();
  28. if ("222".equals(str)) {
  29. iterator.remove();
  30. }
  31. }
  32. System.out.println(list);
  33. }
  34. //使用 forEachRemaining 遍历
  35. public static void testForEachRemaining() {
  36. final Iterator<String> iterator = list.iterator();
  37. iterator.forEachRemaining(new Consumer<String>() {
  38. public void accept(String t) {
  39. System.out.println(t);
  40. }
  41. });
  42. }
  43. }

 

注意事项

  • 在迭代过程中调用集合的 remove(Object o) 可能会报 java.util.ConcurrentModificationException 异常
  • forEachRemaining 方法中 调用Iterator 的 remove 方法会报 java.lang.IllegalStateException 异常
  1. //使用迭代器遍历元素过程中,调用集合的 remove(Object obj) 方法可能会报 java.util.ConcurrentModificationException 异常
  2. public static void testListRevome() {
  3. ArrayList<String> aList = new ArrayList<String>();
  4. aList.add("111");
  5. aList.add("333");
  6. aList.add("222");
  7. System.out.println("移除前:"+aList);
  8. Iterator<String> iterator = aList.iterator();
  9. while(iterator.hasNext())
  10. {
  11. if("222".equals(iterator.next()))
  12. {
  13. aList.remove("222");
  14. }
  15. }
  16. System.out.println("移除后:"+aList);
  17. }
  18. //JDK 1.8 Iterator forEachRemaining 方法中 调用Iterator 的 remove 方法会报 java.lang.IllegalStateException 异常
  19. public static void testForEachRemainingIteRemove () {
  20. final Iterator<String> iterator = list.iterator();
  21. iterator.forEachRemaining(new Consumer<String>() {
  22. public void accept(String t) {
  23. if ("222".equals(t)) {
  24. iterator.remove();
  25. }
  26. }
  27. });
  28. }

 

点点赞赏,手留余香

给TA打赏
共0人
还没有人赞赏,快来当第一个赞赏的人吧!
    Java

    迭代器Iterator是什么?

    2020-7-23 21:20:26

    Java

    Iterator和 ListIterator有什么区别?

    2020-7-23 21:21:02

    本站所发布的一切源码、模板、应用等文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权。本站内容适用于DMCA政策。若您的权利被侵害,请与我们联系处理,站长 QQ: 84087680 或 点击右侧 私信:盾给网 反馈,我们将尽快处理。
    ⚠️
    本站所发布的一切源码、模板、应用等文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权。本站内容适用于DMCA政策
    若您的权利被侵害,请与我们联系处理,站长 QQ: 84087680 或 点击右侧 私信:盾给网 反馈,我们将尽快处理。
    0 条回复 A文章作者 M管理员
    欢迎您,新朋友,感谢参与互动!
      暂无讨论,说说你的看法吧
    个人中心
    购物车
    优惠劵
    今日签到
    私信列表
    搜索