在阅读ArrayList的jdk源码的时候,你经常会看到这两个系统函数
①Arrays.copyOf(elementData, size);
而这个方法的源码是:
public static <T> T[] copyOf(T[] original, int newLength) {
return (T[]) copyOf(original, newLength, original.getClass());
}
public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) {
T[] copy = ((Object)newType == (Object)Object[].class)
? (T[]) new Object[newLength]
: (T[]) Array.newInstance(newType.getComponentType(), newLength);
System.arraycopy(original, 0, copy, 0,
Math.min(original.length, newLength));
return copy;
}
估计很多人看到这里来了很多人就没有耐心看了,在这里我就说说这个方法
Arrays.copyOf(elementData, size);实际上是一个扩容的方法,将elementData这个数组的大小复制成size大小另一个数组。返回一个新的数组。数组里面原来有的元素不变,而其他的元素使用null来进行填充。
②System.arraycopy(elementData, 0, elementData, 0, size);
这个函数是System类里面定义的一个方法,在这里我写了一个测试的方法,
public class TestSystemArray {
public static void main(String[] args) {
// TODO Auto-generated method stub
String [] arr ={"a","b","c","d","e","f"};
/**
* arr:源数组
* 0:从源数组的第0个位置开始复制,
* arr:目标数组
* 3:从目标数组的第三个位置覆盖
* 3:复制的长度为3个
*/
System.arraycopy(arr, 0, arr, 3, 3);
System.out.println("---------复制出来的新的数组---------");
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+",");
}
}
}
运行的结果;
由此就知道了这个函数的真正的意思了。