View RSS Feed

My Java Tips

Copying Arrays

Rate this Entry
by , 11-10-2011 at 05:10 PM (687 Views)
Arrays are very useful and are commonly used in our Java programs. Array name is actually a pointer that points to the continuous memory location. Many Java developers make some mistakes while copying arrays, which become difficult to cater.


Consider the following scenario:

I have a String array called 'array' which have 5 elements in it. I declared another String array called 'array_tmp'. I want to copy the contents of 'array' to 'array_tmp'. One simple way is to do that in a for loop, but its hectic. Usually Java programmers/developers try to do the following:

Java Code:
String array[] = new String[5];
String array_tmp[] = new String[5];

for(int i=0;i
{
array[i] = "String" + i;
}
array_tmp = array;
array[1] = "CHANGED";

for(int i=0;i
{
System.out.println("Array - Value at index " + i + " is " + array[i]);
}

for(int i=0;i
{
System.out.println("Array_tmp - Value at index " + i + " is " + array_tmp[i]);
}
Output:


Array - Value at index 0 is String0
Array - Value at index 1 is CHANGED
Array - Value at index 2 is String2
Array - Value at index 3 is String3
Array - Value at index 4 is String4
Array_tmp - Value at index 0 is String0
Array_tmp - Value at index 1 is CHANGED
Array_tmp - Value at index 2 is String2
Array_tmp - Value at index 3 is String3
Array_tmp - Value at index 4 is String4

Here we tried to copy arrays using equal operator. After that we changed the value at index 1 of ‘array’.While printing, we noticed that value at index 1 of ‘array_tmp’ also got changed. This is because the ‘array’ was not copied to ‘array_tmp’. The reference was copied so ‘array’ is also referred as ‘array_tmp’ and both are refering to the same array.

Correct way is to use clone method to copy array. Clone method copied the contents of one array to other array. One can also use a for loop to copy contents on one array to other but as already said, it is a bit hectic. Another acceptable way is to use arrayCopy methood where you can specify which part of the array to copy.


String array[] = new String[5];
String array_tmp[] = new String[5];

for(int i=0;i
{
array[i] = "String" + i;
}
array_tmp = array;

array_tmp = array.clone();
array[1] = "CHANGED";

for(int i=0;i
{
System.out.println("Array - Value at index " + i + " is " + array[i]);
}

for(int i=0;i
{
System.out.println("Array_tmp - Value at index " + i + " is " + array_tmp[i]);
}


Output:


Array - Value at index 0 is String0
Array - Value at index 1 is CHANGED
Array - Value at index 2 is String2
Array - Value at index 3 is String3
Array - Value at index 4 is String4
Array_tmp - Value at index 0 is String0
Array_tmp - Value at index 1 is String1
Array_tmp - Value at index 2 is String2
Array_tmp - Value at index 3 is String3
Array_tmp - Value at index 4 is String4

Submit "Copying Arrays" to Facebook Submit "Copying Arrays" to Digg Submit "Copying Arrays" to del.icio.us Submit "Copying Arrays" to StumbleUpon Submit "Copying Arrays" to Google

Tags: arrays, copying Add / Edit Tags
Categories
Java SE

Comments