Java ListIterator 迭代器的使用(Iterator 与 ListIterator 的区别)

简介: Java ListIterator 迭代器的使用(Iterator 与 ListIterator 的区别)

一、简介

  • 通过 List 集合的 listIterator() 方法得到,它是 List 集合特有的迭代器。
  • 允许程序员沿任一方向遍历列表的列表迭代器,在迭代期间修改列表,并获取列表中迭代器的当前位置。
  • IteratorListIterator 的区别:
    Iterator:只能从上到下便利元素。
    ListIterator:可以沿任一方向遍历列表,修改列表、获取当前索引。

二、案例代码

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
import java.util.Iterator;
public class test {
  public static void main(String[] args) {
    // 创建集合对象
    List<String> list = new ArrayList<String>();
    // 添加
    list.add("dzm");
    list.add("xyq");
    System.out.println(list); // [dzm, xyq]
    // -------------------- Iterator 迭代器
    // Iterator 迭代器
    Iterator<String> it = list.iterator();
    // 便利,从上到下便利
    while (it.hasNext()) {
      System.out.println(it.next()); // dzm xyq
    }
    // 循环中途插入数据,会报错
    for (String string : list) {
      if (string.equals("dzm")) {
        list.add("dll"); // Exception in thread "main" java.util.ConcurrentModificationException
      }
    }
    // -------------------- ListIterator 迭代器
    // ListIterator 迭代器
    // ListIterator<String> lit = list.listIterator(list.size()); // 将位置移到最尾部,方面从下到上便利
    ListIterator<String> lit = list.listIterator(); // 默认从 0 开始
    // 便利,从上到下便利
    while (lit.hasNext()) {
      System.out.println(lit.next()); // dzm xyq
    }
    // 便利,从下往上便利
    while (lit.hasPrevious()) {
      System.out.println(lit.previous()); // xyq dzm
    }
    // 便利,从上往下便利,循环中途插入数据,没问题
    while (lit.hasNext()) {
      String s = lit.next();
      if (s.equals("dzm")) {
        // Iterator 无法做到进行添加操作,通过变量 list 也不行,因为在调用 next() 的时候,会比较实际修改集合的次数与预期修改集合的次数效验,会不一致。
        // ListIterator 会在调用 next() 的时候,同步实际与预期修改次数,保持一致,所以可以进行添加
        lit.add("djy");
      }
    }
    System.out.println(list); // [dzm, djy, xyq]
  }
}
目录
打赏
0
0
0
0
269
分享
相关文章
如何在 Java 中避免使用迭代器
在Java中,为了避免使用迭代器,可以采用foreach循环来遍历集合或数组,简化代码,提高可读性。此外,Java 8引入的Stream API提供了更强大的功能,如filter、map等方法,能够以函数式编程风格处理数据,进一步减少对传统迭代器的依赖。
91 7
Java 高级面试技巧:yield() 与 sleep() 方法的使用场景和区别
本文详细解析了 Java 中 `Thread` 类的 `yield()` 和 `sleep()` 方法,解释了它们的作用、区别及为什么是静态方法。`yield()` 让当前线程释放 CPU 时间片,给其他同等优先级线程运行机会,但不保证暂停;`sleep()` 则让线程进入休眠状态,指定时间后继续执行。两者都是静态方法,因为它们影响线程调度机制而非单一线程行为。这些知识点在面试中常被提及,掌握它们有助于更好地应对多线程编程问题。
85 9
Java面试必问!run() 和 start() 方法到底有啥区别?
在多线程编程中,run和 start方法常常让开发者感到困惑。为什么调用 start 才能启动线程,而直接调用 run只是普通方法调用?这篇文章将通过一个简单的例子,详细解析这两者的区别,帮助你在面试中脱颖而出,理解多线程背后的机制和原理。
77 12
Java社招面试题:& 和 && 的区别,HR的套路险些让我翻车!
今日分享的主题是如何区分&和&&的区别,提高自身面试的能力。主要分为以下四部分。 1、自我面试经历 2、&amp和&amp&amp的不同之处 3、&对&&的不同用回答逻辑解释 4、彩蛋
Java社招面试题:& 和 && 的区别,HR的套路险些让我翻车!
小米,29岁程序员,分享了一次面试经历,详细解析了Java中&和&&的区别及应用场景,展示了扎实的基础知识和良好的应变能力,最终成功获得Offer。
116 14
|
3月前
|
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
44 1
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
129 8
Java代码解释++i和i++的五个主要区别
本文介绍了前缀递增(++i)和后缀递增(i++)的区别。两者在独立语句中无差异,但在赋值表达式中,i++ 返回原值,++i 返回新值;在复杂表达式中计算顺序不同;在循环中虽结果相同但使用方式有别。最后通过 `Counter` 类模拟了两者的内部实现原理。
Java代码解释++i和i++的五个主要区别
JAVA之旅(十九)——ListIterator列表迭代器,List的三个子类对象,Vector的枚举,LinkedList,ArrayList和LinkedList的小练习
JAVA之旅(十九)——ListIterator列表迭代器,List的三个子类对象,Vector的枚举,LinkedList,ArrayList和LinkedList的小练习 关于数据结构,所讲的知识太多了,我们只能慢慢的来分析了 一.
1092 0
|
14天前
|
【Java并发】【线程池】带你从0-1入门线程池
欢迎来到我的技术博客!我是一名热爱编程的开发者,梦想是编写高端CRUD应用。2025年我正在沉淀中,博客更新速度加快,期待与你一起成长。 线程池是一种复用线程资源的机制,通过预先创建一定数量的线程并管理其生命周期,避免频繁创建/销毁线程带来的性能开销。它解决了线程创建成本高、资源耗尽风险、响应速度慢和任务执行缺乏管理等问题。
138 60
【Java并发】【线程池】带你从0-1入门线程池

热门文章

最新文章