Yandex

Java Advanced ConceptsJava Advanced Concepts3

Java ArrayList listIterator() method
Syntax and Examples


Introduction

The `listIterator()` method in Java's ArrayList provides a way to iterate over the elements of the list sequentially. It allows you to traverse the list forward and backward, insert new elements, or remove existing ones during iteration – all while maintaining the integrity of the list. This is more flexible than a simple loop when you need to modify the list while iterating.

Syntax

public ListIterator<E> listIterator() 
public ListIterator<E> listIterator(int index)

Parameters

Parameter Description
index The starting position for the iteration. The iterator will start at this index. If index is greater than the size of the list, an IndexOutOfBoundsException will be thrown.

Return Value

The method returns a ListIterator<E> object, which provides methods for iterating over the elements of the list.

Examples

Example 1: Creating a ListIterator from the Beginning

This example demonstrates how to create a ListIterator that starts at the beginning of the ArrayList. We'll use it to print each element in the list.

import java.util.ArrayList; 
import java.util.List;
import java.util.ListIterator;

public class ArrayListListIteratorExample {
public static void main(String[] args) {
List<String> fruits = new ArrayList<>(
"apple", "banana", "orange", "grape"
);

ListIterator<String> iterator = fruits.listIterator();

while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
apple
banana
orange
grape

Explanation: We create an ArrayList of strings and then call the default `listIterator()` method. This returns a list iterator starting from index 0. The `hasNext()` method checks if there are more elements to iterate over, and `next()` retrieves the next element in the list.

Example 2: Creating a ListIterator at a Specific Index

This example shows how to create a ListIterator that starts at a specific index. We'll start from index 1 and print only the elements after that index.

import java.util.ArrayList; 
import java.util.List;
import java.util.ListIterator;

public class ArrayListListIteratorExample2 {
public static void main(String[] args) {
List<String> fruits = new ArrayList<>(
"apple", "banana", "orange", "grape"
);

ListIterator<String> iterator = fruits.listIterator(1); // Start from index 1

while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
banana
orange
grape

Explanation: We call `listIterator(1)` to create an iterator that begins at the second element ("banana") of the list. The loop then iterates through the remaining elements.

Example 3: Modifying the List During Iteration

This example demonstrates how to add a new element to the list while iterating using the `ListIterator`. Adding an element shifts subsequent elements, so we must be careful about our index.

import java.util.ArrayList; 
import java.util.List;
import java.util.ListIterator;

public class ArrayListListIteratorModifyExample {
public static void main(String[] args) {
List<String> fruits = new ArrayList<>(
"apple", "banana", "orange"
);

ListIterator<String> iterator = fruits.listIterator();

iterator.next(); // Move to the second element (banana)
iterator.add("kiwi"); // Insert "kiwi" before banana

System.out.println(fruits);
}
}
[apple, kiwi, banana, orange]

Explanation: We start the iterator and then move it to the second element using iterator.next(). Then, we use iterator.add("kiwi") to insert "kiwi" before "banana". The list is modified directly during iteration.

Example 4: Iterating Backwards

This example demonstrates using the `ListIterator` to iterate through a list backwards.

import java.util.ArrayList; 
import java.util.List;
import java.util.ListIterator;

public class ArrayListListIteratorBackwardExample {
public static void main(String[] args) {
List<String> fruits = new ArrayList<>(
"apple", "banana", "orange"
);

ListIterator<String> iterator = fruits.listIterator();

// Move to the end of the list
while (iterator.hasNext()) {
iterator.next();
}

// Iterate backwards
while (iterator.hasPrevious()) {
System.out.println(iterator.previous());
}
}
}
orange
banana
apple

Explanation: We first move the iterator to the end of the list using `iterator.next()` in a loop. Then, we use `iterator.hasPrevious()` and `iterator.previous()` to traverse the list backward.


Welcome to ProgramGuru

Sign up to start your journey with us

Support ProgramGuru.org

You can support this website with a contribution of your choice.

When making a contribution, mention your name, and programguru.org in the message. Your name shall be displayed in the sponsors list.

PayPal

UPI

PhonePe QR

MALLIKARJUNA M