ArrayList listIterator() 方法示例

位置:首页>文章>详情   分类: Java教程 > 编程技术   阅读(325)   2023-06-26 07:54:18

ArrayList listIterator() 返回此列表中元素的列表迭代器。它是一个双向迭代器,本质上是快速失败

默认情况下,列表迭代器返回的元素顺序正确。

1. ArrayList listIterator()方法

listIterator() 方法被重载并有两种变体:

  • 列表迭代器 列表迭代器() – 返回此列表中元素的列表迭代器。
  • 列表迭代器 列表迭代器(整数索引) – 返回此列表中元素的列表迭代器(以适当的顺序),从列表中的指定位置开始。指定的 index 指示将由对 next 的初始调用返回的第一个元素。对 previous 的初始调用将返回具有指定 index 减一的元素。

方法参数 – 从列表迭代器返回的第一个元素的索引。
方法返回 – 元素的列表迭代器。
方法throwsIndexOutOfBoundsException – 如果索引超出范围(小于 0 或大于列表大小)。

2. ArrayList listIterator()——迭代

Java 程序使用通过 listIterator() 方法获得的列表迭代器来迭代数组列表。我们将学习在向前和向后方向 迭代列表。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.ListIterator;

public class ArrayListExample 
{
    public static void main(String[] args) throws CloneNotSupportedException 
    {
        ArrayList<String> alphabets = new ArrayList<>(Arrays.asList("A", "B", "C", "D"));
        
        ListIterator<String> listItr = alphabets.listIterator();
        
        System.out.println("===========Forward=========");
        
        while(listItr.hasNext()) {
            System.out.println(listItr.next());
        }
        
        System.out.println("===========Backward=========");
        
        while(listItr.hasPrevious()) {
            System.out.println(listItr.previous());
        }
    }
}

程序输出。

===========Forward=========
A
B
C
D
===========Backward=========
D
C
B
A

3. ArrayList listIterator() – 添加/删除

ListIterator 支持在迭代列表时添加和删除列表中的元素。

  • listIterator.add(Element e) – 将元素插入到 next() 返回的元素之前或 $ 返回的元素之后$$ 方法。
  • listIterator.remove() – 从列表中删除由 next()previous() 方法返回的最后一个元素。
  • import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.ListIterator;
    
    public class ArrayListExample 
    {
        public static void main(String[] args) throws CloneNotSupportedException 
        {
            ArrayList<String> alphabets = new ArrayList<>(Arrays.asList("A", "B", "C", "D"));
            
            ListIterator<String> listItr = alphabets.listIterator();
            
            System.out.println(listItr.next());		//A
            System.out.println(listItr.next());		//B
            
            listItr.add("E");       
            
            System.out.println(alphabets); //["A", "B", "E", "C", "D"]
            
            System.out.println(listItr.previous());	//E
            System.out.println(listItr.next());		//E
            
            System.out.println(listItr.next());		//C
            
            listItr.remove();       
            
            System.out.println(alphabets); //["A", "B", "E", "D"]
            
            System.out.println(listItr.next());		//D
        }
    }

    程序输出。

    A
    B
    [A, B, E, C, D]
    E
    E
    C
    D
    [A, B, E, D]

    4. ArrayList listIterator()——快速失败

    ListIterator 快速失败。这意味着如果我们在创建列表迭代器后修改数组列表,那么它将在 ConcurrentModificationExceptionnext() 方法上抛出 previous()称呼。

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.ListIterator;
    
    public class ArrayListExample 
    {
        public static void main(String[] args) throws CloneNotSupportedException 
        {
            ArrayList<String> alphabets = new ArrayList<>(Arrays.asList("A", "B", "C", "D"));
            
            ListIterator<String> listItr = alphabets.listIterator();
            
            System.out.println(listItr.next());     //A
            System.out.println(listItr.next());     //B
                
            alphabets.add("E");       
            
            System.out.println(alphabets);          //["A", "B", "C", "D", "E"]
            
            System.out.println(listItr.next());     //Error
        }
    }

    程序输出。

    A
    B
    [A, B, C, D, E]
    Exception in thread "main" java.util.ConcurrentModificationException
    	at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
    	at java.util.ArrayList$Itr.next(ArrayList.java:851)
    	at com.cundage.example.ArrayListExample.main(ArrayListExample.java:22)

    5. Iterator 和 ListIterator 的区别

    <正文>
    迭代器 列表迭代器
    可用于迭代所有集合类。 只能用于迭代 List 实现的类。
    仅支持正向迭代。 同时支持正向和反向迭代。
    仅支持 READ 和 DELETE 操作。 支持所有CRUD操作。
    通过iterator()方法获取 通过listIterator()方法获取

    以上就是 Java 中的 ArrayList listIterator() 方法

    快乐学习!!

    更多参考:

    Java ArrayList 指南
    ArrayList Java 文档
    ListIterator Java 文档

    标签2: Java ArrayList
    地址:https://www.cundage.com/article/arraylist-listiterator.html

    相关阅读

    ArrayList ensureCapacity() 方法增加了给定 ArrayList 实例的容量,如果有必要,以确保它至少可以容纳方法参数指定的项目数 &lt;代码&gtl;最小容量。 当 ...
    ArrayList clear() 方法用于从列表中删除所有元素。此调用返回后列表将为空。 1. ArrayList clear() 语法 clear() 方法做的事情很简单。它迭代 array...
    通过示例了解在 Java 中将 ArrayList 转换为字符串数组的不同方法。 1.将arraylist转换为数组——List.toArray() 这是将包含字符串值的数组列表转换为字符串数组...
    了解如何获取 ArrayList 中最后一次出现的元素的索引。我们将使用 ArrayList.lastIndexOf() 方法来获取最后一个索引。 1. ArrayList.lastIndexO...
    ArrayList.remove(int index) 方法从 ArrayList 中删除元素。 Remove 方法重载。 ArrayList.remove(E element) – 删除指定索...
    通过易于理解的示例,学习如何在 Java 中将 Vector 转换为 ArrayList,反之亦然。 1. 将 Vector 转换为 ArrayList 要将包含对象的向量转换为包含相似对象的 ...
    了解如何获取现有 ArrayList 的子列表。我们将使用 ArrayList.subList() 方法来获取 arraylist 对象的子列表。 1.ArrayList.subList()方法...
    ArrayList add() 方法 用于在列表中添加一个元素。我们可以在 arraylist 中添加任何类型的元素,但是为了让程序以更可预测的方式运行,我们应该只在任何 goven 列表实例中...
    在 Java 中,ArrayList 类默认是可序列化的。它本质上意味着我们不需要显式实现 Serializable 接口来序列化 ArrayList。 我们可以直接使用ObjectOutput...
    通过示例学习在 Java 中将 LinkedList 转换为 ArrayList。我们还将学习如何在 Java 中将数组列表转换为链表。 1.将LinkedList转换为ArrayList 要将...