前言
ArrayList 底层是数组.所以遍历比较快.
但是有个缺点是扩容的时候,需要将 已有的 copy 到 新的 数组中.
这会造成 内存和时间上面的浪费.
目标
我们封装一个链表类. 内部包含一个ArrayList的类. 如果ArrayList 需要扩容的时候,直接在创建一个 ArrayList 就可以了. 这么一来,就省下了 扩容的时间和内存
实现
public class ArrayLists<T> implements Lists<T>{
private Integer cap;
private ArrayList<T> currentList;
private Set<ArrayList> listSet = new HashSet<>();
public ArrayLists(int cap){
this.cap = cap;
this.currentList = new ArrayList<>(cap);
this.listSet.add(this.currentList);
}
public void add(T t){
if (this.isCap()) {
}else{
this.currentList = new ArrayList<>(cap);
this.listSet.add(this.currentList);
}
this.currentList.add(t);
}
public Boolean isCap(){
return this.currentList.size() < this.cap;
}
}
使用
public static void main(String[] args) {
ArrayLists<String> lists = new ArrayLists<>(2);
lists.add("1");
lists.add("2");
lists.add("3");
lists.add("4");
lists.add("5");
System.out.println("");
}
DEBUG 代码
可以看到,我们给每个 List 设置了大小.以我们的 cap 设置边界
如果超过了边界的话,就在内部创建一个新的 ArrayList 进行数据的存储
遍历
public void forE(){
for (ArrayList arrayList : listSet) {
ArrayList arrayList1 = arrayList;
for (int i = 0; i < arrayList1.size(); i++) {
T t = (T) arrayList1.get(i);
}
}
}