为了加深理解,我就自己写了下LinkList和arrayList。
下面贴下代码
链表代码
public class MyTwoLinkedList<AnyType> implements Iterable<AnyType> {
private int theSize;
private int modCount = 0;
private Node<AnyType> beginMarker;
private Node<AnyType> endMarker;
private static class Node<AnyType> {
public AnyType data;
public Node<AnyType> prev;
public Node<AnyType> next;
public Node(AnyType d, Node<AnyType> p, Node<AnyType> n) {
data = d;
prev = p;
next = n;
}
}
public MyTwoLinkedList() {
clear();
}
public void clear() {
beginMarker = new Node<AnyType>(null, null, null);
endMarker = new Node<AnyType>(null, beginMarker, null);
beginMarker.next = endMarker;
theSize = 0;
modCount++;
}
public int size() {
return theSize;
}
public Boolean add(AnyType x) {
add(size(), x);
return true;
}
public void add(int idx, AnyType x) {
addBefore(getNode(idx), x);
}
//搜索节点,先判断节点在前半段还是后半段,略提高效率,双链表可以从两个方向查找
private Node<AnyType> getNode(int idx) {
Node<AnyType> p;//一个引用
if (idx < 0 || idx > size())
throw new IndexOutOfBoundsException();