Java ArrayList
last modified November 12, 2021
Java ArrayList tutorial shows how to work with ArrayList collection in Java. Located in the java.util package, ArrayList is an important collection of the Java collections framework.
Java collections framework is a unified architecture for representing and manipulating collections, enabling collections to be manipulated independently of implementation details. A collection is an object that represents a group of objects.
Java ArrayList
ArrayList is an ordered sequence of elements. It is dynamic and resizable. It provides random access to its elements. Random access means that we can grab any element at constant time. An ArrayList automatically expands as data is added. Unlike simple arrays, an ArrayList can hold data of multiple data types. It permits all elements, including null.
Elements in the ArrayList are accessed via an integer index. Indexes are zero-based. Indexing of elements and insertion and deletion at the end of the ArrayList takes constant time.
An ArrayList instance has a capacity. The capacity is the size of the array used to store the elements in the list. As elements are added to an ArrayList, its capacity grows automatically. Choosing a proper capacity can save some time.
Java ArrayList adding single items
Single elements can be added to an ArrayList with the add method.
The example adds elements to an array list one by one.
List langs = new ArrayList[];An ArrayList is created. The data type specified inside the diamond brackets [< >] restricts the elements to this data type; in our case, we have a list of strings.
langs.add["Java"];An element is appended at the end of the list with the add method.
langs.add[1, "C#"];This time the overloaded add method inserts the element at the specified position; The "C#" string will be located at the second position of the list; remember, the ArrayList is an ordered sequence of elements.
for [String lang : langs] { System.out.printf["%s ", lang]; }With the for loop, we go through the ArrayList list and print its elements.
Ruby Java C# PythonNote that the elements keep the order they were inserted.
Java List.of
Since Java 9, we have a couple of factory methods for creating lists having a handful of elements. The created list is immutable.
In the example, we create two lists that have four and three elements.
Java ArrayList get[] and size[]
The get returns the element at the specified position in this list and the size returns the size of the list.
The example uses the get and size methods of the ArrayList
String col = colours.get[1];The get method returns the second element, which is "orange".
int size = colours.size[];The size method determines the size of our colours list; we have four elements.
orange The size of the ArrayList is: 4Java ArrayList copy
A copy of a list can be generated with List.copy method.
The example creates a copy of a list with List.copy.
Raw ArrayList
An ArrayList can contain various data types. These are called raw lists.
Raw lists often require casts and they are not type safe.
The example adds five different data types into an array list a string, double, integer, object, and enumeration.
List da = new ArrayList[];When we add multiple data types to a list, we omit the angle brackets.
Java 3.5 55 com.zetcode.Base@659e0bfd EASYJava ArrayList add multiple elements
The following example uses the addAll method to add multiple elements to a list in one step.
Two lists are created. Later, the elements of the lists are added to the third list with the addAll method.
colours3.addAll[colours1];The addAll method adds all of the elements to the end of the list.
colours3.addAll[2, colours2];This overloaded method adds all of the elements starting at the specified position.
white orange yellow pink brown blue red greenJava ArrayList modifying elements
The next example uses methods to modify the ArrayList.
An ArrayList is created and modified with the set, add, remove, and clear methods.
items.set[3, "watch"];The set method replaces the fourth element with the "watch" item.
items.add["bowl"];The add method adds a new element at the end of the list.
items.remove[0];The remove method removes the first element, having index 0.
items.remove["pen"];The overloaded remove method remove the first occurrence of the "pen" item.
items.clear[];The clear method removes all elements from the list.
if [items.isEmpty[]] {The isEmpty method determines if the list is empty.
pencil watch book spectacles glass bowl The list is emptyJava ArrayList removeIf
The removeIf method removes all of the elements of a collection that satisfy the given predicate.
In our example, we have an ArrayList of integers. We use the removeIf method to delete all negative values.
values.removeIf[val -> val < 0];All negative numbers are removed from the array list.
[5, 2, 8, 6]Java ArrayList removeAll
The removeAll method removes from this list all of its elements that are contained in the specified collection. Note that all elements are removed with clear.
In the example, we remove all "a" letters from the list.
Java ArrayList replaceAll
The replaceAll method replaces each element of a list with the result of applying the operator to that element.
The example applies an operator on each of the list elements; the elements' letters are transformed to uppercase.
A UnaryOperator that transforms letters to uppercase is created.
items.replaceAll[uo];The operator is applied on the list elements with the replaceAll method.
[COIN, PEN, CUP, NOTEBOOK, CLASS]The second example uses the replaceAll method to capitalize string items.
We have a list of string items. These items are capitalized with the help of the replaceAll method.
class MyOperator implements UnaryOperator {A custom UnaryOperator is created.
@Override public String apply[String var] { if [var == null || var.length[] == 0] { return var; } return var.substring[0, 1].toUpperCase[] + var.substring[1]; }Inside the UnaryOperator's apply method, we retur the string with its first letter in uppercase.
items.replaceAll[new MyOperator[]];The operator is applied on the list items.
[Coin, Pen, Cup, Notebook, Glass]Java ArrayList contains[]
The contains method returns true if a list contains the specified element.
The example checks if the specified item is in the list.
if [items.contains[item]] { System.out.printf["There is a %s in the list%n", item]; }The message is printed if the item is in the list.
There is a pen in the listGetting index of elements in ArrayList
Each of the elements in an ArrayList has its own index number. The indexOf returns the index of the first occurrence of the specified element, or -1 if the list does not contain the element. The lasindexOf returns the index of the last occurrence of the specified element, or -1 if the list does not contain the element.
The example prints the first and last index of the "orange" element.
1 4Java list of lists
We can add other lists into a list.
The example creates three lists of integers. Later, the lists are added into another fourth list.
List l1 = new ArrayList[]; l1.add[1]; l1.add[2]; l1.add[3];A list of integers is created.
List nums = new ArrayList[]; nums.add[l1]; nums.add[l2]; nums.add[l3];A list of lists is created.
for [List list : nums] { for [Integer n : list] { System.out.printf["%d ", n]; } System.out.println[]; }We use two for loops to go through all the elements.
[[1, 2, 3], [4, 5, 6], [7, 8, 9]] 1 2 3 4 5 6 7 8 9Java ArrayList subList
The subList method returns a view of the portion of a list between the specified fromIndex, inclusive, and toIndex, exclusive. The changes in a sublist are reflected in the original list.
The example creates a sublist from a list of items.
List items2 = items.subList[2, 5];A sublist is created with the subList method; it contains items with indexes 2, 3, and 4.
items2.set[0, "bottle"];We replace the first item of the sublist; the modification is reflected in the original list, too.
[cup, notebook, glass] [bottle, notebook, glass] [coin, pen, bottle, notebook, glass, chair, ball, bowl]Java ArrayList traversing
In the following example, we show five ways to traverse an ArrayList.
In the example, we traverse an array list of integers with for loops, while loop, iterator, and forEach construct.
List nums = new ArrayList[]; nums.add[2]; nums.add[6]; nums.add[7]; nums.add[3]; nums.add[1]; nums.add[8];We have created an ArrayList of integers.
for [int i = 0; i < nums.size[]; i++] { System.out.printf["%d ", nums.get[i]]; }Here, we use the classic for loop to iterate over the list.
for [int num : nums] { System.out.printf["%d ", num]; }The second way uses the enhanced-for loop, which was introduced int Java 5.
int j = 0; while [j < nums.size[]] { System.out.printf["%d ", nums.get[j]]; j++; }The third way uses the while loop.
ListIterator it = nums.listIterator[]; while[it.hasNext[]] { System.out.printf["%d ", it.next[]]; }Here, a ListIterator is used to traverse the list.
nums.forEach[e -> System.out.printf["%d ", e]];In the last way, we use the forEach method, which was introduced in Java 8.
2 6 7 3 1 8 2 6 7 3 1 8 2 6 7 3 1 8 2 6 7 3 1 8 2 6 7 3 1 8The example prints the elements of a list to the console, utilizing various techniques.
Java ArrayList sorting
There are different wasy to sort an ArrayList.
Sorting ArrayList with its sort method
The ArrayList's sort method sorts a list according to the order induced by the specified comparator.
We have an ArrayList of custom Person classes. We sort the persons according to their age in a reversed order.
persons.sort[Comparator.comparing[Person::getAge].reversed[]];This line sorts the persons by their age, from the oldest to the youngest.
[Age: 54 Name: Greg, Age: 47 Name: Patrick, Age: 39 Name: Robert, Age: 32 Name: Peter, Age: 22 Name: Mary, Age: 17 Name: Jane]Sorting ArrayList with Java 8 stream
In the second example, we use Java stream to sort the ArrayList. Streams API is a more powerful way to do sorting.
In this example, we have a list of countries. Each country has a name and population. The countries are sorted by population.
List sorted_countries = countries.stream[] .sorted[[e1, e2] -> Integer.compare[e1.getPopulation[], e2.getPopulation[]]].collect[Collectors.toList[]];With the stream method, we create a stream from a list. The sorted method sorts elements according to the provided comparator. With Integer.compare we compare the populations of countries. With collect, we transform the stream into a list of countries.
[Country{name=Latvia, population=1978000}, Country{name=Slovakia, population=5424000}, Country{name=Hungary, population=9845000}, Country{name=Poland, population=38485000}, Country{name=Germany, population=81084000}]The countries are sorted by their population in ascending mode.
Working with ArrayList and simple Java array
The following example uses an ArrayList with a simple Java array.
An ArrayList is converted to an array and vice versa.
List planets = Arrays.asList["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"];With the Arrays.asList method, we create a fixed-size list backed by the specified array.
String[] planets2 = planets.toArray[new String[0]];The ArrayList's toArray is used to convert a list to an array.
Stream to list
Java streams can be converted to lists using collectors.
We have a stream of strings. We convert the stream to a list with Collectors.toList.
class java.util.ArrayListIn this tutorial, we have worked with the Java ArrayList container.
List all Java tutorials.