LinkedList
easy to expend, such as insert or delete
each element is a separate object : Node
disadvantage: need more memory to store reference to next node( extra 4 bytes on 32-bit CPU)
Two type:
1 singly linked list
2 double linked list
ps : circular linked list : last node points back to first node( head)
Clone: If we simply use the clone() method from the Object class, we will get the following structure called a "shallow" copy:
linkedlist 实现 可以参照此处代码
其中内部类实现iterator,比较有意思!
注意iterator通常需要实现三个函数
- AnyType next() - returns the next element in the container
- boolean hasNext() - checks if there is a next element
- void remove() - (optional operation).removes the element returned by next()
/*******************************************************
* The Iterator class
********************************************************/
public Iterator<AnyType> iterator()
{
return new LinkedListIterator();
}
private class LinkedListIterator implements Iterator<AnyType>
{
private Node<AnyType> nextNode;
public LinkedListIterator()
{
nextNode = head;
}
public boolean hasNext()
{
return nextNode != null;
}
public AnyType next()
{
if (!hasNext()) throw new NoSuchElementException();
AnyType res = nextNode.data;
nextNode = nextNode.next;
return res;
}
public void remove() { throw new UnsupportedOperationException(); }
}