1-2、ArrayList的模拟实现
ArrayList是一种顺序表,是基于数组实现的,很明显,它的性能和特性和数组是类似的。
import java.util.Arrays;public class MyArrayList<E> {// 初始容量private static final int DEFAULT_CAPACITY = 10;// list大小private int size;// 实现存储用的数组private Object[] items;public MyArrayList() {clear();}public MyArrayList(int initialCapacity) {if (initialCapacity < 0)throw new IllegalArgumentException("Illegal Capacity: " + initialCapacity);this.items = new Object[initialCapacity];}/** * 将表恢复到到默认状态 */public void clear() {size = 0;ensureCapacity(DEFAULT_CAPACITY);}/** * 确保合适的容量 * * @param newCapacity */private void ensureCapacity(int newCapacity) {if (newCapacity < size)return;Object[] old = items;// items = (E[]) new Object[newCapacity];// for (int i = 0; i < size(); i++) {// items[i] = old[i];// }items = Arrays.copyOf(old, newCapacity);}public int size() {return size;}/** * 根据索引获得元素 * * @param index * @return */public E get(int index) {if (index > size) {throw new ArrayIndexOutOfBoundsException();}return (E) items[index];}/** * 插入新元素,插入位置为size * * @param newVal * @return */public boolean add(E newVal) {add(size, newVal);return true;}/** * 在指定位置插入新元素 * * @param index * @param newVal */public void add(int index, E newVal) {if (items.length == size)ensureCapacity(size * 2 + 1);for (int i = size; i > index; i--) {items[i] = items[i - 1];}items[index] = newVal;size++;}/** * 判断是否为空 * * @return */public boolean isEmpty() {return size == 0;}}