How to copy an Array in Java

摘要: The methods described below are only applicable to one dimensional arrays. Before we talk about the different ways to copy an array in Java we will show you how NOT to copy an Array.

The methods described below are only applicable to one dimensional arrays. Before we talk about the different ways to copy an array in Java we will show you how NOT to copy an Array.

How NOT to copy an Array in Java

Arrays in Java are Objects. If you try to treat them as variables… well you can(!) but what you are really copying is the reference!. The example below explains this statement.

HowNOTtoCopyAnArray.java
package com.mkyong.copyarray;
import java.util.Arrays;
public class HowNOTtoCopyAnArray {
	public static void main(String[] args){
		int[] x = {1, 2, 3, 4, 5};
		int[] y = x; //don't copy array like this!
		System.out.println(Arrays.toString(x));
		System.out.println(Arrays.toString(y)+"\n");
		x[1] = 22; // y[1] will display 22! same reference
		System.out.println(Arrays.toString(x));
		System.out.println(Arrays.toString(y)+"\n");
		y[4] = 55; // x[4] will display 55!
		System.out.println(Arrays.toString(x));
		System.out.println(Arrays.toString(y));

Output:

[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
[1, 22, 3, 4, 5]
[1, 22, 3, 4, 5]
[1, 22, 3, 4, 55]
[1, 22, 3, 4, 55]

1. Object.clone()

Arrays inherit methods from Object class, and clone is one of them. If you need to copy an Array as it is then this is the method you should use.

CloneArray.java
package com.mkyong.copyarray;
import java.util.Arrays;
public class CloneArray {
	public static void main(String[] args){
		int[] x = {1, 2, 3, 4, 5};
		int[] y = x.clone();
		System.out.println(Arrays.toString(x));
		System.out.println(Arrays.toString(y)+"\n");
		x[1] = 22;
		System.out.println(Arrays.toString(x));
		System.out.println(Arrays.toString(y)+"\n");
		y[4] = 55;
		System.out.println(Arrays.toString(x));
		System.out.println(Arrays.toString(y));

Output:

[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
[1, 22, 3, 4, 5]
[1, 2, 3, 4, 5]
[1, 22, 3, 4, 5]
[1, 2, 3, 4, 55]

2. Arrays.copyOf()

In Arrays class there are two methods that copy an array fully or partially. Here’s an example of copyOf() method.

ArraysCopyOfMethod.java
package com.mkyong.copyarray;
import java.util.Arrays;
public class ArraysCopyOfMethod {
	public static void main(String[] args){
		String[] x = {"one", "two", "three", "four", "five"};
		String[] y = Arrays.copyOf(x, x.length);
		String[] z = Arrays.copyOf(x, 3); //will copy the 3 first elements of array x
		System.out.println("Array x: " + Arrays.toString(x));
		System.out.println("Array y: " + Arrays.toString(y));
		System.out.println("Array z: " + Arrays.toString(z));

Output:

Array x: [one, two, three, four, five]
Array y: [one, two, three, four, five]
Array z: [one, two, three]

3. Arrays.copyOfRange()

And this is an example of copyOfRange() method.

ArraysCopyOfRangeMethod.java
package com.mkyong.copyarray;
import java.util.Arrays;
public class ArraysCopyOfRangeMethod {
	public static void main(String[] args){
		String[] x = {"one", "two", "three", "four", "five"};
		String[] y = Arrays.copyOfRange(x, 0, x.length); //full copy of the array
		String[] z = Arrays.copyOfRange(x, x.length-2, x.length); //copy only the last 2 elements
		System.out.println("Array x: " + Arrays.toString(x));
		System.out.println("Array y: " + Arrays.toString(y));
		System.out.println("Array z: " + Arrays.toString(z));

Output:

Array x: [one, two, three, four, five]
Array y: [one, two, three, four, five]
Array z: [four, five]

4. System.arraycopy()

With System.arraycopy() you can control the range of elements from the source array that you want to copy,
and the destined position.

Review the System.arraycopy signature (JavaDoc) :

arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
SystemArrayCopy.java
package com.mkyong.copyarray;
import java.util.Arrays;
public class SystemArrayCopy {
	public static void main(String[] args){
		String[] x = {"one", "two", "three", "four", "five"};
		String[] y = new String[2];
		System.arraycopy(x, 3, y, 0, 2);
		System.out.println("Array x: " + Arrays.toString(x));
		System.out.println("Array y: " + Arrays.toString(y) + "\n");
		Object[] z = new Object[5];
		System.arraycopy(x, 0, z, 0, 5);
		System.out.println("Array z: " + Arrays.toString(z)+"\n");
		Integer[] w = {3, 4, 5};
		System.out.println("Array w: " + Arrays.toString(w));
		//copy from the second value (1) of array w to z and place in the fourth place (3) the 2 values 
		System.arraycopy(w, 1, z, 3, 2); 
		System.out.println("Array z: " + Arrays.toString(z));

Output:

Array x: [one, two, three, four, five]
Array y: [four, five]
Array z: [one, two, three, four, five]
Array w: [3, 4, 5]
Array z: [one, two, three, 4, 5]
Note
Don’t forget to surround your code with try catch to handle Exceptions thrown

References

  1. Arrays JavaDoc
  2. System JavaDoc
  3. How to Copy Arrays in Java

上一篇: Java Digital Signatures example
下一篇: Java Swing JOptionPane showOptionDialog example
 评论 ( What Do You Think )
名称
邮箱
网址
评论
验证
   
 

 


  • 微信公众号

  • 我的微信

站点声明:

1、一号门博客CMS,由Python, MySQL, Nginx, Wsgi 强力驱动

2、部分文章或者资源来源于互联网, 有时候很难判断是否侵权, 若有侵权, 请联系邮箱:summer@yihaomen.com, 同时欢迎大家注册用户,主动发布无版权争议的 文章/资源.

3、鄂ICP备14001754号-3, 鄂公网安备 42280202422812号