前言
ArrayList 底层是数组.所以遍历比较快.
但是有个缺点是扩容的时候,需要将 已有的 copy 到 新的 数组中.
这会造成 内存和时间上面的浪费.
目标
我们封装一个链表类. 内部包含一个ArrayList的类. 如果ArrayList 需要扩容的时候,直接在创建一个 ArrayList 既可以了. 这么一来,就省下了 扩容的时间和内存
实现
private int cap;
private ArrayList<T> list = null;
private ArrayLinkedList<T> pre;
private ArrayLinkedList<T> current;
private ArrayLinkedList<T> next;
public ArrayLinkedList(int cap){
this.cap = cap;
list = new ArrayList<>(cap);
this.current = this;
}
public ArrayLinkedList add(T t){
if(!this.current.isCap()){
this.next = new ArrayLinkedList(2);
this.next.pre = this;
this.next.current = this.next;
this.current = this.next.current;
}
this.current.list.add(t);
return this.current;
}
public Boolean isCap(){
return this.current.list.size() < this.cap;
}
使用
ArrayLinkedList<Object> list = new ArrayLinkedList<>(2);
list.add("1")
.add("2")
.add("3")
.add("4")
.add("5");
System.out.println("");
DEBUG 代码
可以看到,我们给每个 List 设置了大小.以我们的 cap 设置边界
如果超过了边界的话,就创建一个新的ArrayList . 进行数据的存储