Ova

How to create ArrayList object in Java?

Published in Java Collections 5 mins read

To create an ArrayList object in Java, you primarily use the new keyword, specifying the type of elements it will hold.

Basic ArrayList Creation

The most straightforward way to instantiate an ArrayList is by using its constructor. An ArrayList is a dynamic array that can grow or shrink as needed, making it highly versatile for managing collections of objects.

Here's the fundamental syntax:

import java.util.ArrayList; // Don't forget to import ArrayList

public class ArrayListCreation {
    public static void main(String[] args) {
        // Create an ArrayList to store String objects
        ArrayList<String> listOfNames = new ArrayList<String>();

        // Add elements to the ArrayList
        listOfNames.add("Alice");
        listOfNames.add("Bob");
        listOfNames.add("Charlie");

        System.out.println("ArrayList of Names: " + listOfNames);
    }
}

In this example:

  • import java.util.ArrayList;: This line is crucial as ArrayList is part of the java.util package.
  • ArrayList<String>: This specifies that the ArrayList will store objects of type String. This is known as using generics, which provides type safety and prevents ClassCastException at runtime.
  • new ArrayList<String>(): This calls the constructor of the ArrayList class to create a new, empty instance.

Key Characteristics of ArrayLists

When working with ArrayList objects, keep the following important points in mind:

  • Object-Only Storage: A fundamental characteristic of ArrayLists is that they can only hold objects, not primitive types such as int, double, boolean, etc. If you need to store primitive values, you must use their corresponding wrapper classes (e.g., Integer for int, Double for double).

    import java.util.ArrayList;
    
    public class PrimitiveArrayList {
        public static void main(String[] args) {
            // Correct way to store integers: use Integer wrapper class
            ArrayList<Integer> ages = new ArrayList<Integer>();
            ages.add(25); // Autoboxing converts int 25 to Integer object
            ages.add(30);
            System.out.println("ArrayList of Ages: " + ages);
        }
    }
  • Retrieving Elements: To access elements from an ArrayList at a specific position, you use the get() method, providing the index of the desired element (indexes are 0-based).

    import java.util.ArrayList;
    
    public class RetrieveArrayListItem {
        public static void main(String[] args) {
            ArrayList<String> fruits = new ArrayList<String>();
            fruits.add("Apple");
            fruits.add("Banana");
            fruits.add("Cherry");
    
            // Retrieve the element at index 0
            String firstFruit = fruits.get(0);
            System.out.println("First fruit: " + firstFruit); // Output: Apple
        }
    }

Advanced ArrayList Creation Techniques

Beyond the basic constructor, there are other ways to create and initialize ArrayList objects, offering more flexibility or performance benefits.

1. Using the List Interface (Recommended Practice)

It's common practice to declare ArrayList variables using the List interface. This promotes good programming principles (program to an interface, not an implementation) and makes your code more flexible, allowing you to easily switch to other List implementations (like LinkedList) if needed, with minimal code changes.

import java.util.ArrayList;
import java.util.List; // Import the List interface

public class InterfaceCreation {
    public static void main(String[] args) {
        List<String> animals = new ArrayList<String>(); // Declared as List, instantiated as ArrayList
        animals.add("Dog");
        animals.add("Cat");
        System.out.println("List of Animals: " + animals);
    }
}

2. Specifying Initial Capacity

An ArrayList has an internal array. When this array gets full, a new, larger array is created, and all elements are copied over. This operation can be costly. If you have a good estimate of the number of elements your ArrayList will hold, you can specify an initial capacity to reduce the number of re-sizing operations.

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

public class InitialCapacity {
    public static void main(String[] args) {
        // Create an ArrayList with an initial capacity of 20 elements
        List<String> productCodes = new ArrayList<String>(20);
        productCodes.add("P001");
        // ... add up to 20 elements without resizing ...
        System.out.println("Product codes initialized with capacity: " + productCodes);
    }
}

3. Initializing from Another Collection

You can create an ArrayList by passing an existing Collection (like another List, Set, etc.) to its constructor.

import java.util.ArrayList;
import java.util.Arrays; // For Arrays.asList()
import java.util.List;

public class CollectionInitialization {
    public static void main(String[] args) {
        // Create a List from an array
        List<String> initialColors = Arrays.asList("Red", "Green", "Blue");

        // Create a new ArrayList from the existing list
        List<String> favoriteColors = new ArrayList<String>(initialColors);
        favoriteColors.add("Yellow"); // You can add more elements
        System.out.println("Favorite colors: " + favoriteColors);
    }
}

4. Immutable List (Java 9+)

For creating unmodifiable List objects (which are not ArrayLists but are related for quick initialization), Java 9 introduced List.of(). These lists are useful when you need a fixed collection.

import java.util.List;

public class ImmutableListCreation {
    public static void main(String[] args) {
        // Create an immutable List
        List<String> daysOfWeek = List.of("Monday", "Tuesday", "Wednesday", "Thursday", "Friday");
        System.out.println("Days of the week: " + daysOfWeek);

        // Note: You cannot add or remove elements from an immutable list
        // daysOfWeek.add("Saturday"); // This would throw UnsupportedOperationException
    }
}

Common ArrayList Methods

Understanding key methods beyond creation and retrieval is essential for effective ArrayList manipulation.

Method Description Example
add(E e) Appends the specified element to the end of this list. myList.add("New Item");
add(int index, E element) Inserts the specified element at the specified position in this list. myList.add(1, "Middle Item");
get(int index) Returns the element at the specified position in this list. String item = myList.get(0);
set(int index, E element) Replaces the element at the specified position in this list with the specified element. myList.set(0, "Updated Item");
remove(int index) Removes the element at the specified position in this list. myList.remove(0);
remove(Object o) Removes the first occurrence of the specified element from this list, if it is present. myList.remove("New Item");
size() Returns the number of elements in this list. int count = myList.size();
isEmpty() Returns true if this list contains no elements. boolean empty = myList.isEmpty();
contains(Object o) Returns true if this list contains the specified element. boolean hasItem = myList.contains("Item");
clear() Removes all of the elements from this list. myList.clear();

For more detailed information, refer to the official Oracle Java documentation for ArrayList.