When working with Java, initializing a list is a common task that you’ll encounter in various scenarios. Whether you’re creating a new list from scratch or converting other data structures into a list, having a clear understanding of different initialization techniques can greatly enhance your coding efficiency. In this article, we’ll explore various methods to initialize a list in Java, using popular keywords like Java List, List Initialization, and One Line. So, let’s dive in and discover the different approaches!

Using Arrays.asList()

One straightforward way to initialize a list in Java is by utilizing the Arrays.asList() method. This method allows us to convert an array into a list in just one line of code. Let’s take a look at an example:

List<String> list = Arrays.asList(new String[]{"foo", "bar"});

In the above code snippet, we use the Arrays.asList() method to create a list containing the elements “foo” and “bar”. This approach offers a concise and readable way to initialize a list.

Advantages of Arrays.asList()

The Arrays.asList() method provides a convenient way to create a list, but it’s important to understand its implications. When using Arrays.asList(), it’s crucial to note that the resulting list is not an ArrayList or a LinkedList. Instead, it is a list backed by the original array. This has two implications:

1. Fixed Size

The list created by Arrays.asList() has a fixed size. This means that you cannot add or remove elements from the list. Let’s consider the following code snippet:

List<String> list = Arrays.asList("foo", "bar");
list.add("baz"); // This will throw UnsupportedOperationException

Attempting to add an element to the list will result in an UnsupportedOperationException being thrown. Therefore, it’s important to be aware of this limitation when using Arrays.asList().

2. Shared Reference

The original array and the list created by Arrays.asList() share the same references to the objects. This means that modifying the original array will reflect the changes in the list, and vice versa. Let’s see an example:

String[] array = {"foo", "bar"};
List<String> list = Arrays.asList(array);
array[0] = "baz";

assertEquals("baz", list.get(0)); // This will pass

In the above code, modifying the array also updates the value in the list. This shared reference can have unexpected consequences, so it’s essential to handle it with care.

Creating a List from a Stream (Java 8)

Java 8 introduced the powerful Stream API, which allows us to manipulate collections with ease. We can leverage the Stream API to create and initialize lists in one line. Let’s take a look at an example:

List<String> list = Stream.of("foo", "bar")

In the above code snippet, we use the Stream.of() method to create a stream containing the elements “foo” and “bar”. We then use the collect() method along with Collectors.toList() to convert the stream into a list. This approach provides a concise and flexible way to initialize a list.

It’s important to note that the Collectors.toList() method doesn’t guarantee the exact implementation of the returned list. The mutability, serializability, and thread safety of the list may vary depending on the underlying implementation. Therefore, it’s recommended not to rely on these properties and design your code accordingly.

JDK 9 Factory Methods

Starting from JDK 9, Java introduced convenient factory methods for collections, including lists. These factory methods offer an elegant and concise way to create and initialize lists. Let’s see an example:

List<String> list = List.of("foo", "bar", "baz");

In the above code snippet, we use the List.of() method to create a list containing the elements “foo”, “bar”, and “baz”. It’s important to note that the lists created using the factory methods in JDK 9 are immutable. This immutability ensures thread safety and brings space efficiency benefits.

The Double-Brace Initialization Approach

Another approach to initialize a list in Java is known as double-brace initialization. However, it’s important to note that this approach is considered an anti-pattern and should be used with caution. Let’s see an example:

List<String> cities = new ArrayList<>() {{
    add("New York");

In the above code snippet, we use an anonymous inner class along with the double-brace initialization syntax to create a list containing the elements “New York”, “Rio”, and “Tokyo”. While this syntax appears concise and elegant, it can lead to hidden complexities and side effects. It’s generally recommended to avoid double-brace initialization and opt for more straightforward and readable alternatives.


In this article, we explored different techniques to initialize a list in Java. We covered methods such as Arrays.asList(), creating from a Stream, JDK 9 factory methods, and the double-brace initialization approach. Each method has its advantages and considerations, so it’s important to choose the approach that best suits your specific requirements. By understanding these initialization techniques, you can write more efficient and concise code when working with lists in Java.

Remember, mastering list initialization is just the beginning of your Java journey. There are many more concepts and features to explore. So, keep coding and continue your Java learning adventure!


How do you initialize a List in Java?

There are multiple ways to initialize a List in Java. You can use methods like Arrays.asList(), Stream.collect(), or the factory methods introduced in JDK 9 such as List.of(). Each method has its advantages and considerations, so choose the one that best fits your requirements.

What is the best way to create a List in Java?

The best way to create a List in Java depends on your specific use case and requirements. If you have a fixed set of elements, using the List.of() method introduced in JDK 9 provides a concise and immutable list. If you need more flexibility, you can consider using ArrayList or LinkedList and adding elements dynamically.

Can I initialize a List with a specific size in Java?

Yes, you can initialize an ArrayList with a specific initial capacity using the constructor ArrayList(int initialCapacity). This allows you to specify the expected number of elements in the list to optimize memory usage.

What are the different types of Lists available in Java?

In Java, you have various types of lists available, including ArrayList, LinkedList, Vector, and CopyOnWriteArrayList. Each type has its characteristics and is suitable for different scenarios. ArrayList is a resizable array implementation, LinkedList is a doubly-linked list, Vector is similar to ArrayList but thread-safe, and CopyOnWriteArrayList is a thread-safe variant optimized for read-heavy workloads.

How can I add elements to a List in Java?

To add elements to a List in Java, you can use the add() method provided by the List interface. For example, list.add(element) adds an element to the end of the list, and list.add(index, element) inserts an element at the specified index. Additionally, you can use methods like addAll() to add multiple elements or another collection to the list.

Is it possible to initialize a List with default values in Java?

In Java, you cannot directly initialize a List with default values. However, you can achieve this by using methods like Collections.nCopies() or by manually looping and adding the default values to the List.

Can I convert an array to a List in Java?

Yes, you can convert an array to a List in Java. One common approach is to use the Arrays.asList() method, which wraps the array into a List. Another option is to use the Stream API, where you can call Arrays.stream(array).collect(Collectors.toList()) to convert the array to a List.

Opt out or Contact us anytime. See our Privacy Notice

Follow us on Reddit for more insights and updates.

Comments (0)

Welcome to A*Help comments!

We’re all about debate and discussion at A*Help.

We value the diverse opinions of users, so you may find points of view that you don’t agree with. And that’s cool. However, there are certain things we’re not OK with: attempts to manipulate our data in any way, for example, or the posting of discriminative, offensive, hateful, or disparaging material.

Your email address will not be published. Required fields are marked *


Register | Lost your password?