首先看看ArrayList 类:
里面定义了默认大小
private static final int DEFAULT_CAPACITY = 10;
定义一个空对象数组
private static final Object[] EMPTY_ELEMENTDATA = {};
又定义了一个空对象数组,好像用于计数有多少个加入。
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
定义大小
private int size;
初始化构造参数。传入大小,定义容量。
public ArrayList(int initialCapacity) { if (initialCapacity > 0) { this.elementData = new Object[initialCapacity]; } else if (initialCapacity == 0) { this.elementData = EMPTY_ELEMENTDATA; } else { throw new IllegalArgumentException("Illegal Capacity: "+ initialCapacity); } }
空参初始化,这应该只是声明一下下。
public ArrayList() { this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA; }
又一种初始化方法,传入一个几个对象,将他变成数组对象,并赋值给elementDate。
public ArrayList(Collection<? extends E> c) { elementData = c.toArray(); if ((size = elementData.length) != 0) { // c.toArray might (incorrectly) not return Object[] (see 6260652) if (elementData.getClass() != Object[].class) elementData = Arrays.copyOf(elementData, size, Object[].class); } else { // replace with empty array. this.elementData = EMPTY_ELEMENTDATA; } }
先来学以下这个方法,在Arrays类中定义。指定对象数组,指定数组长度,指定新类。
public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) { @SuppressWarnings("unchecked") 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中的一个方法。用在ArrayList 中add(Object)中。
public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) { @SuppressWarnings("unchecked") T[] copy = ((Object)newType == (Object)Object[].class) ? (T[]) new Object[newLength] : (T[]) Array.newInstance(newType.getComponentType(), newLength); //本方法再往下走就是native了。估计是个复制数组的方法。 System.arraycopy(original, 0, copy, 0, Math.min(original.length, newLength)); return copy; }
大体来讲就是定义了一些对象数组,包装成一个ArrayList类,然后再对其进行crud。