Program: How To Reverse ArrayList in Java + Custom Reverse

1. Introduction


In this article, we'll be learning how to reverse ArrayList in java. Reversing can be done in two ways using Collections.reverse() method and custom reverse method.
This is one of the ArrayList interview questions commonly asked.


In the end, You will decide which is the simplest way to reverse List?

Program: How To Reverse ArrayList in Java + Custom Reverse





2. Reverse Using Collections.reverse() Method


Collections class a utility method to reverse the List implementation. reverse() method takes List as an argument. So that any List implementation such as ArrayList, Vector or LinkedList can be passed as argument to this method. Internally, this method runs a loop sequentially. It takes first, last index elements and swaps the values in their positions and the same process will be repeated for second and size-2. This logic is applied until reaches the mid element. This takes time complexity O(n).

Example:

package com.java.w3schools.blog.arraylist;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

/**
*
* Reversing list using public static void reverse(List<?> list) -> Collections.reverse()
*
* @author javaprogramto.com
*
*/
public class ArrayListReverse {

public static void main(String[] args) {
ArrayList<String> yearsList = new ArrayList<String>(Arrays.asList("1720", "1820", "1920", "2020"));

System.out.println("Original list before Reverse : " + yearsList);

Collections.reverse(yearsList);

System.out.println("Reversed list : " + yearsList);

}

}

Output:

Original list before Reverse : [1720, 1820, 1920, 2020]
Reversed list : [2020, 1920, 1820, 1720]

reverse() method reverses the original list rather than creating a new list with reversed values. To Collections.sort() method, you can pass LinkedList or Vector objects similar to the ArrayList.

3. Custom reverse without built-in API methods


In the previous example, We have seen how we can reverse ArrayList with collections.reverse() method.
Now, we will write a program to use our own logic to reverse. First, create a separate the new list as reversedList with the same original list size. next, run the for loop from last index to 0. Take each value from last index and add the value to the reversedList. Finally, reversedList will be holding values in the reverse order and the original list remains have values in the same positions without any changes.

package com.java.w3schools.blog.arraylist;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/*
* ArrayList Custom reverse
*
*/
public class ArrayListCustomReverse {

public static void main(String[] args) {

List<Integer> numbers = new ArrayList<Integer>();

numbers.add(10);
numbers.add(20);
numbers.add(30);
numbers.add(40);
numbers.add(50);
numbers.add(60);
numbers.add(70);
numbers.add(80);
numbers.add(90);

System.out.println("Original list : " + numbers);

List<Integer> reversedList = new ArrayList<Integer>(numbers.size());

for (int i = numbers.size() - 1; i >= 0; i--) {

reversedList.add(numbers.get(i));
}

System.out.println("Reversed list with custom approach : " + reversedList);
System.out.println("Checking the Original list : " + numbers);
}

}

Output:

Original list : [10, 20, 30, 40, 50, 60, 70, 80, 90]
Reversed list with custom approach : [90, 80, 70, 60, 50, 40, 30, 20, 10]
Checking the Original list : [10, 20, 30, 40, 50, 60, 70, 80, 90]

See the output, it has reversed the values and stored the result in the separate list. And printed the original list at the end which did not get modified.

4. Exceptions


below is the exception is thrown at runtime.

Original list : [10, 20, 30, 40, 50, 60, 70, 80, 90]
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 9, Size: 9
at java.util.ArrayList.rangeCheck(ArrayList.java:657)
at java.util.ArrayList.get(ArrayList.java:433)
at com.java.w3schools.blog.arraylist.ArrayListCustomReverse.main(ArrayListCustomReverse.java:33)


5. Conclusion


In this post, we have seen the programs on how to reverse a list in java using Collections.sort() and custom reversing (own implementation).

Collections.reverse() is the simplest way to reverse and this method has an optimized logic because it just swaps the values first and last index and repeats the same process until reaches the mid element. This takes less to reverse but the input list will be modified. If you do not want to modify the existing list then go for the Custom reverse approach but you can still optimize the logic using the bidirectional approach.


Other References:

Stackoverflow
ArrayList Sort
ArrayList Examples


0 Comments