首页 > 代码库 > java数组对象的复制
java数组对象的复制
一、首先,区分数组间的赋值
1 import java.util.Arrays; 2 public class Array { 3 public static void main(String[] args) 4 { 5 int[] array = new int[]{0, 1, 2, 3}; 6 int[] arr = array; //书组赋值 7 System.out.println(Arrays.toString(array)); //输出array 8 System.out.println(Arrays.toString(arr)); //输出arr 9 arr[0] = 4; 10 System.out.println(Arrays.toString(array));11 System.out.println(Arrays.toString(arr));12 } 13 }
输出结果如下:
这叫数组赋值,数组之间没有隔离性。
二、数组对象的复制,实现数组的隔离性
首先介绍数组赋值的2中方法:
1.System.arraycopy(Object src, int srcPos, Object dest,int destPos, int len)
src - 源数组。
srcPos - 源数组中的起始位置。
dest - 目标数组。
destPos - 目标数据中的起始位置。
length - 要复制的数组元素的数量。
该方法是Java API提供的,底层是c++写的,所以效率很高。
1 import java.util.Arrays; 2 public class Array { 3 public static void main(String[] args) 4 { 5 int[] array = new int[]{0, 1, 2, 3}; 6 int[] arr = new int[4]; //{0, 0, 0, 0} 7 System.arraycopy(array, 0, arr, 0, array.length); 8 System.out.println(Arrays.toString(array)); //输出array 9 System.out.println(Arrays.toString(arr)); //输出arr10 arr[0] = 4; 11 System.out.println(Arrays.toString(array));12 System.out.println(Arrays.toString(arr));13 } 14 }
可以看到数组之间有隔离性,这就是数组的复制
2.Arrays.copyOf(JDK1.6版本提供的方法,所以你的开发环境JDk必须是1.6及以上)
该方法对于不同的的数据类型有不同的重载方法
1 //复杂数据类型 2 public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) { 3 T[] copy = ((Object)newType == (Object)Object[].class) 4 ? (T[]) new Object[newLength] 5 : (T[]) Array.newInstance(newType.getComponentType(), newLength); 6 System.arraycopy(original, 0, copy, 0, 7 Math.min(original.length, newLength)); 8 return copy; 9 }10 public static <T> T[] copyOf(T[] original, int newLength) {11 return (T[]) copyOf(original, newLength, original.getClass());12 }
由U类型复制为T类型?
original - 要复制的数组
newLength - 要返回的副本的长度
newType - 要返回的副本的类型
1 //基本数据类型(其他类似byte,short···)2 public static int[] copyOf(int[] original, int newLength) {3 int[] copy = new int[newLength];4 System.arraycopy(original, 0, copy, 0,5 Math.min(original.length, newLength));6 return copy;7 }
java数组对象的复制
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。