In this post we see what is the solution to the problem of adding a new element to an existing array. As we saw in the Java Tutorial 6 – #4 Arrays, arrays are objects which manage a homogeneous and compact list of items.
Because the list of elements is a compact memory area in Heap, the answer to the question of how we add a new element is that it is NOT possible. Once constructed the array, with a finite number of elements, the space it occupies can not be resized.
So we can not reallocate or enlarge memory space already allocated. The only solution to add a new element to an array with n elements is:
- define a new array of size n+1;
- copy those n values into new array;
- the last element will be initialized with the new value;
- the array value (it is a reference) will be reinitialized with the address of the new list of values;
//initial array
int[] oldArray = {1,2,3,4,5};
//new value
int newValue = 10;
//define the new array
int[] newArray = new int[oldArray.length + 1];
//copy values into new array
for(int i=0;i < oldArray.length;i++)
newArray[i] = oldArray[i];
//another solution is to use
//System.arraycopy(oldArray, 0, newArray, 0, oldArray.length);
//add new value to the new array
newArray[newArray.length-1] = newValue;
//copy the address to the old reference
//the old array values will be deleted by the Garbage Collector
oldArray = newArray;
If the application requires a lot of operations, like this one, it is better to use a data structure that is more efficient on adding or removing elements. In Java, this could be the ArrayList collection (more about collections in a new post - Tutorial Java 6 – Contents)
for(int i=0;i < oldArray.length;i++)
newArray[i] = oldArray[i];
should be written as
System.arraycopy(oldArray, 0, newArray, 0, oldArray.length);
Hi,
Thank you for your observation. I have modified the example an put the arraycopy solution as a comment.
Anyway, in this post Tutorial Java 6 – #4.2 How to copy values of an array into another array I have described also this solution.