image.png
这一路走走停停,顺着少年漂流的痕迹,迈出车站的前一刻,竟有些犹豫.....风吹起了从前,最近喜欢单曲循环这首歌《起风了》,频幕对面的老铁们可以去听听,感觉不错哦,今天我们来了解一下,在java中如何实现数组的任意拷贝,我们可能经常使用arrayCopy这个方法,那我们今天就来实现一下自己的arrayCopy方法,老铁们觉得怎么样?直接上代码吧:
我们先来了解arrayCopy这个方法所需要的参数:
> public static void arrayCopy(Object,src,int srcPos, Object dest, int destPos, int length)
参数:
src:源数组
srcPos:源数组中的起始位置
dest:目标数组
destPos:目标数组中的起始位置
length:要复制数组元素的数量
在进行数组拷贝的过程中,我们需要判断该数组是否为空等,防止抛异常,在官方的API中我们可以发现:
QQ截图20180506205747.png
从上面API中可以发现,这些异常我们可以避免,so 直接从代码看:
代码示例:
public class ArrayCopyDemo {
public static void main(String[] args) {
定义原数组
int[] src = new int[] {1,2,3,4,5,6,7,8,9,10};
目标数组的初始容量
int[] dest= new int[10];
arraycopy(src,2,dest,3,4);
System.out.println(Arrays.toString(dest));
}
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
{
if (src == null || dest == null) {
throw new NullPointerException("源和目的数组不能为空");
}
if (!src.getClass().isArray()|| !dest.getClass().isArray() ) {
throw new ArrayStoreException("源和目标必须是数组");
}
if (srcPos < 0 ||destPos < 0 || length <0|| srcPos+length > Array.getLength(src)
|| destPos +length > Array.getLength(dest)) {
throw new IndexOutOfBoundsException("索引越界");
}
if (src.getClass().getComponentType() !=
dest.getClass().getComponentType()) {
throw new ArrayStoreException("源和目标元素类型要一致");
}
for (int index = srcPos; index
获取需要拷贝的原数组
Object value = Array.get(src, index);
给目标数组添加元素
Array.set(dest,destPos,value);
destPos++;
}
}
}
结果如下:
QQ截图20180506211219.png
哈哈,很简单吧,我们实现了数组拷贝,自己可以动手试试!!!!