数据结构与算法的学习笔记目录:《恋上数据结构与算法》的学习笔记 目录索引
int[] array = new int[]{
11,22,33};

在很多编程语言中,数组有个致命的缺点,无法动态修改容量;
实际开发中,我们希望数组的容量是动态变化的。
// 元素的数量
int size();
// 是否为空
boolean isEmpty();
// 是否包含某个元素
boolean contains(E element);
// 添加元素到最后面
void add(E element);
// 返回index位置对应的元素
E get(int index);
// 设置index位置的元素
E set(int index, E element);
// 往index位置添加元素
void add(int index, E element);
// 删除index位置对应的元素
E remove(int index);
// 查看元素的位置
int indexOf(E element);
// 清除所有元素
void clear();

public class ArrayList<E> {
private int size;
private E[] elements;
}
public class ArrayList<E> {
private int size;
private E[] elements;
// 设置elements数组默认的初始化空间
private static final int CAPACITY_DEFAULT = 10;
public ArrayList(int capacity) {
// 如果当前数组长度小于默认容量,则设定为默认容量DEFAULT_CAPACITY 10,否则是capacity
capacity = (capacity < CAPACITY_DEFAULT) ? CAPACITY_DEFAULT : capacity;
elements = (E[]) new Object[capacity];// 进行动态确定数组容量
// 注意:写成new E[capaticy]是错误的,必须写为其父类Object,然后再强制转换
}
// 默认情况
public ArrayList() {
this(CAPACITY_DEFAULT);// 调用有参构造方法,对数组进行定义
}
}

public void add(E element) {
elements[size] = element;
size++;
}

// 扩容
private void ensureCapacity(){
// 获取数组当前容量(长度)
int oldLength = elements.length;
// 如果 当前存储的元素个数(size) < 当前数组容量,直接返回
if(size < oldLength){
return;
}
// 新数组的容量为原数组容量的1.5倍
int newCapacity = oldLength + (oldLength >> 1);
// 创建新数组
E[] newElements = (E[]) new Object[newCapacity];
//原数组中的元素存储到新数组中
for(int i = 0; i < size; i++){
newElements[i] = elements[i];
}
// 引用新数组(新数组的索引要指向旧数组的索引)
elements = newElements;
}
public void add(E element){
// 添加新元素之前,先判断是否需要扩容
ensureCapacity();
elements[size] = element;
size++;
}