Java中四种常用的数组复制的方法copyOf(),arraycop(),clone()和copyOfRange()的使用与区别
在Java中,数组的复制有多种方法,主要有以下四种:
- Arrays.copyOf()
- System.arraycopy()
- Arrays.copyOfRange()
- Object.clone()
下面我们来详细看一下这四种方法的使用和区别:
- Arrays.copyOf()
这是一个非常简单的方法,只需要一个源数组和一个目标长度作为参数。如果目标长度大于源数组的长度,则多余的部分会用0填充。如果源数组的元素类型是对象,则多余的部分会用null填充。
int[] src = {1, 2, 3, 4, 5};
int[] dest = Arrays.copyOf(src, 10);
- System.arraycopy()
这是一个本地方法,比较底层,参数较多,需要指定源数组、源数组的起始位置、目标数组、目标数组的起始位置以及复制的长度。
int[] src = {1, 2, 3, 4, 5};
int[] dest = new int[10];
System.arraycopy(src, 0, dest, 0, 5);
- Arrays.copyOfRange()
这个方法和copyOf()方法类似,但是它可以指定复制的范围,即源数组的开始和结束位置。
int[] src = {1, 2, 3, 4, 5};
int[] dest = Arrays.copyOfRange(src, 0, 3);
- Object.clone()
这是一个方法需要注意的是,只有实现了Cloneable接口的类才能使用这个方法。这个方法会创建一个新的对象,并复制原对象的内容。需要注意的是,clone()方法并不会对对象内部的数组进行深度复制,如果对象内部的数组包含对象,则这些对象只是简单的复制了引用。
int[] src = {1, 2, 3, 4, 5};
int[] dest = src.clone();
总结:
- Arrays.copyOf() 方法简单,但不能指定复制的范围。
- System.arraycopy() 方法复杂,但可以指定复制的范围,并且性能更好。
- Arrays.copyOfRange() 方法和copyOf()方法类似,但可以指定复制的范围。
- Object.clone() 方法需要对象实现Cloneable接口,并不会进行深度复制。
评论已关闭