数组最好写得支持泛型
public class Array<T> {
#T 是自己自定义的一个类型
}
java 不支持直接 new 一个泛型,必须先 new 一个 Object,然后前面进行 类型转换
data = (E[]) new Object[capacity]
动态数组:扩容部分
if size == length :
resize(2*data.length);
private void resize(int newcapacity) {
E[] newData = (E[]) new Object[newcapacity];
for(int i=0;i<size;i++) {newdata[i] = data[i];
}
data = newdata
复杂度震荡问题 :本来 removelast, 和 addlast 操作,均摊的时间复杂度是 O(n), 但是如果操作到了需要扩容或缩容的元素,频繁的进行,removelast, 然后又 addlast,这样一直是 O(n)
出现这样问题的原因呢:我们添加和删除时候的扩容太激进了,(too eager), 应该元素个数变成总容量 1 / 4 的时候,我们只缩容到容量的一半,而不是过于激进,直接缩容到 1 /4