How to quickly and conveniently create a one element arraylist
Categories:
How to Quickly and Conveniently Create a One-Element ArrayList in Java

Learn various efficient methods to initialize an ArrayList with a single element in Java, enhancing code readability and performance.
Creating an ArrayList
with just one element is a common task in Java programming. While straightforward, there are several idiomatic and efficient ways to achieve this, each with its own advantages. This article explores different approaches, from traditional methods to more concise Java 8+ features, helping you choose the best option for your specific use case.
Traditional Approach: Instantiation and Addition
The most basic way to create a single-element ArrayList
is to instantiate an empty ArrayList
and then use its add()
method to insert the desired element. This method is explicit and easy to understand, making it suitable for beginners or situations where clarity is paramount.
import java.util.ArrayList;
public class OneElementArrayList {
public static void main(String[] args) {
// Method 1: Traditional instantiation and add
ArrayList<String> list1 = new ArrayList<>();
list1.add("Hello");
System.out.println("List 1: " + list1);
}
}
Creating a single-element ArrayList using the traditional add()
method.
Using Arrays.asList()
for Immutability and Conversion
The Arrays.asList()
method provides a convenient way to create a fixed-size List
from an array. While the returned List
is not a true ArrayList
(it's a fixed-size wrapper around the array), it can be used to initialize an ArrayList
. This approach is concise but has an important caveat: the list returned by Arrays.asList()
is immutable in terms of size. To get a mutable ArrayList
, you must pass the result of Arrays.asList()
to the ArrayList
constructor.
import java.util.ArrayList;
import java.util.Arrays;
public class OneElementArrayList {
public static void main(String[] args) {
// Method 2: Using Arrays.asList() and converting to ArrayList
ArrayList<String> list2 = new ArrayList<>(Arrays.asList("World"));
System.out.println("List 2: " + list2);
// Note: Arrays.asList() itself returns a fixed-size list
// List<String> fixedList = Arrays.asList("Fixed");
// fixedList.add("New"); // This would throw UnsupportedOperationException
}
}
Initializing an ArrayList using Arrays.asList()
for a single element.
Arrays.asList()
. The List
it returns is a fixed-size view of the underlying array. Attempting to add or remove elements from this list will result in an UnsupportedOperationException
. Always wrap it in a new ArrayList
constructor if mutability is required.Concise Initialization with Collections.singletonList()
For creating an immutable List
containing exactly one element, Collections.singletonList()
is the most efficient and semantically clear method. It returns a special, immutable List
implementation that is optimized for a single element. This is ideal when you need a read-only list with one item.
import java.util.ArrayList;
import java.util.Collections;
public class OneElementArrayList {
public static void main(String[] args) {
// Method 3: Using Collections.singletonList()
// This creates an immutable List, not an ArrayList directly
// If you need a mutable ArrayList, wrap it:
ArrayList<String> list3 = new ArrayList<>(Collections.singletonList("Java"));
System.out.println("List 3: " + list3);
// For an immutable single-element list:
// List<Integer> immutableList = Collections.singletonList(123);
// immutableList.add(456); // Throws UnsupportedOperationException
}
}
Using Collections.singletonList()
to create a single-element ArrayList (or immutable List).
flowchart TD A[Start] --> B{"Need a mutable ArrayList?"} B -->|Yes| C[Instantiate ArrayList] C --> D[Add Element] B -->|No| E{"Need an immutable List?"} E -->|Yes| F["Use Collections.singletonList()"] E -->|No, but want to convert from array| G["Use new ArrayList<>(Arrays.asList())"] D --> H[End] F --> H G --> H
Decision flow for creating a one-element ArrayList.
Java 8+ Stream API Approach
With Java 8 and later, the Stream API offers a functional way to create collections. While potentially overkill for a single element, it demonstrates a modern approach that can be extended for more complex collection creations. You can create a stream from a single element and then collect it into an ArrayList
.
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class OneElementArrayList {
public static void main(String[] args) {
// Method 4: Using Java 8 Stream API
ArrayList<String> list4 = Stream.of("Stream").collect(Collectors.toCollection(ArrayList::new));
System.out.println("List 4: " + list4);
}
}
Creating a single-element ArrayList using Java 8 Stream API.
List
(not necessarily an ArrayList
) in Java 9+, you can use List.of("element")
. This creates an unmodifiable list that is highly optimized for small sizes. If you need a mutable ArrayList
from this, you'd still wrap it: new ArrayList<>(List.of("element"))
.Summary of Approaches
Choosing the right method depends on your specific needs regarding mutability, readability, and Java version compatibility. Here's a quick overview:
Mutable ArrayList
// Most common and flexible
ArrayList<String> mutableList1 = new ArrayList<>();
mutableList1.add("Element");
// Concise, but involves an intermediate fixed-size list
ArrayList<String> mutableList2 = new ArrayList<>(Arrays.asList("Element"));
// Using Collections.singletonList() as a source
ArrayList<String> mutableList3 = new ArrayList<>(Collections.singletonList("Element"));
// Java 8+ Stream API
ArrayList<String> mutableList4 = Stream.of("Element").collect(Collectors.toCollection(ArrayList::new));
// Java 9+ List.of() as a source
ArrayList<String> mutableList5 = new ArrayList<>(List.of("Element"));
Immutable List
// Best for single-element immutable lists
List<String> immutableList1 = Collections.singletonList("Element");
// Java 9+ for unmodifiable lists (highly recommended)
List<String> immutableList2 = List.of("Element");
// Arrays.asList() returns a fixed-size list, not truly immutable
// but its size cannot be changed.
List<String> fixedSizeList = Arrays.asList("Element");