How to Add New Elements to an Array in Java

  1. Use an ArrayList
  2. Create a New Larger Array

This tutorial discusses how to add new elements to an array in Java.

Array in Java is a container object which holds a fixed number of elements of the same data type. The length of the array is defined while declaring the array object, and can not be changed later on.

Suppose we have an array of length 5 in Java instantiated with some values:

String[] arr = new String[5];
arr[0] = "1";
arr[1] = "2";
arr[2] = "3";
arr[3] = "4";
arr[4] = "5";

Now there is a requirement to add a 6th element to our array. Lets try to add this 6th element to our array.

arr[5] = "6";

The above line of code gives the following error:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5

This is because we declared the array to be of size 5 initially and we tried to add a 6th element to it.

Not to worry, there are 2 possible solutions to get this done. We can use an ArrayList instead of an array or create a new larger array to accommodate new elements.

Use an ArrayList

A better and recommended solution is to use an ArrayList instead of an array since it is resizable. There is no fixed size of ArrayList therefore whenever there is a need to add a new element you can simply add by executing testList.add(element).

import java.util.*;
public class Main {
    public static void main(String args[]) {
        List<String> testList = new ArrayList<String>();
        testList.add("1");
        testList.add("2");
        testList.add("3");
        testList.add("4");
        testList.add("5");
        
        //Print the original list 
        System.out.println("Initial ArrayList:\n"
                           + testList); 
        //Add elements without running into any error
        testList.add("6");
        testList.add("7");
        
        //Print the list after adding elements 
        System.out.println("Modified ArrayList:\n"
                           + testList);
        
    }
}

The above code outputs the following.

Initial ArrayList:
[1, 2, 3, 4, 5]
Modified ArrayList:
[1, 2, 3, 4, 5, 6, 7]

Or if we already have an array, we can also create an ArrayList directly.

import java.util.*;
public class Main {
    public static void main(String args[]) {
        //Create an array
        String[] arr = new String[1];
        arr[0] = "1";
        //Convert to ArrayList
        List<String> testList = new ArrayList<>(Arrays.asList(arr));
        
        //Print the original list 
        System.out.println("Initial ArrayList:\n"
                           + testList); 
        //Add elements to it
        testList.add("2");
        testList.add("3");
        
        //Print the list after adding elements 
        System.out.println("Modified ArrayList:\n"
                           + testList);
        
    }
}

The above code outputs the following.

Initial ArrayList:
[1]
Modified ArrayList:
[1, 2, 3]

We can easily convert an ArrayList back to an array.

import java.util.*;
public class Main {
    public static void main(String args[]) {
        //Create an array
        String[] arr = new String[1];
        arr[0] = "1";
        
        //Convert to ArrayList
        List<String> testList = new ArrayList<>(Arrays.asList(arr));
        
        //Add elements to it
        testList.add("2");
        testList.add("3");
        
        //Convert the arraylist back to an array
        arr = new String[ testList.size() ];
        testList.toArray(arr);
    }
}

Create a New Larger Array

If we are insistent on working with arrays only, we can use the java.util.Arrays.copyOf method to create a bigger array and accommodate a new element. Let us use the array arr we created above and add a new element to it in the example below.

import java.util.*;
public class Main {
    public static void main(String args[]) {
        //Create an array
        String[] arr = new String[5];
        arr[0] = "1";
        arr[1] = "2";
        arr[2] = "3";
        arr[3] = "4";
        arr[4] = "5";
        
        // print the original array 
        System.out.println("Initial Array:\n"
                           + Arrays.toString(arr)); 
                           
        //Steps to add a new element
        //Get the current length of the array
        int N = arr.length;
        //Create a new array of length N+1 and copy all the previous elements to this new array
        arr = Arrays.copyOf(arr, N + 1);
        //Add a new element to the array
        arr[N] = "6";
        // print the updated array 
        System.out.println("Modified Array:\n"
                           + Arrays.toString(arr)); 
    }
}

The above code outputs the following.

Initial Array:
[1, 2, 3, 4, 5]
Modified Array:
[1, 2, 3, 4, 5, 6]

If later we feel the need to add another element to arr, we will have to repeat the above block of code again!

Therefore this solution is not recommended because the addition of every new element has a time complexity of O(n) since it has to copy all the elements from the previous array to a new array. On the other hand, the addition of every new element using ArrayList has O(1) amortized cost per operation.

comments powered by Disqus