一 、arrayList集合ADD方法的简单实现
public class MyArrayList {
//数据存放的数组
private Object[] elementDatas;
//数组的长度
private int size;
public MyArrayList() {
//初始化数组长度为10
elementDatas = new Object[10];
}
public void add(Object obj) {
if (size >= elementDatas.length) {
//如果长度超过了数组的长度,扩大为原有长度的1.5倍
Object[] temp = new Object[elementDatas.length + (elementDatas.length >> 1)];
//把原先的数组复制到新的数组中去,复制给elementDatas
System.arraycopy(elementDatas, 0, temp, 0, size);
elementDatas = temp;
}
elementDatas[size++] = obj;
}
}
二 、linkedList集合ADD方法的简单实现
public class MyLinkedList {
//链表的第一个节点
private Node first;
//链表的最后一个节点
private Node last;
private int size;
public void add(Object obj) {
Node node = new Node();
if (first == null) {
//加入第一个节点
node.prev = null;
node.next = null;
node.obj = obj;
first = node;
last = node;
} else {
node.prev = last;
node.next = null;
node.obj = obj;
//最后节点的下一个是当前节点
last.next = node;
//将当前节点设置为链表最后一个节点
last = node;
}
}
}
class Node {
//当前节点的数据
Object obj;
//上一个节点的数据
Node prev;
//下一个节点的数据
Node next;
public Node(Object obj, Node prev, Node next) {
this.obj = obj;
this.prev = prev;
this.next = next;
}
public Node() {
}
}
对比:当我们要添加数据的时候,arrayList需要判断是否超过了数组长度,超过数组的长度以后,还要新增一个1.5倍长的数组,执行System.arraycopy方法将原先的数组类容复制过去,故添加数据的时候arrayList比linkedList的性能要差一点
arrayList是数组结构,linkedList是链表结构,链表遍历时候需要嵌套循环去找它的下一个Node,故遍历时候arrayList要快一些