纯手写ArrayList集合(二)

在阅读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]+",");
		}
	}

}

运行的结果;

由此就知道了这个函数的真正的意思了。

猜你喜欢

转载自blog.csdn.net/sonwing_for/article/details/81809039