LinkedList
public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, Serializable
实现了List接口,
LinkedList
类还为在列表的开头及结尾
get
、
remove
和
insert
元素提供了统一的命名方法。这些操作允许将链接列表用作堆栈、队列或双端队列。
此类实现 Deque 接口,为 add、poll 提供先进先出队列操作,以及其他堆栈和双端队列操作。
是线程不同步的。
public E getFirst() {
if (size==0)
throw new NoSuchElementException();
return header.next.element;
}
getFirst()方法,取得第一个元素
public E getLast() {
if (size==0)
throw new NoSuchElementException();
return header.previous.element;
}
public E removeFirst() {
return remove(header.next);
}
public E removeLast() {
return remove(header.previous);
}
删除第一个或最后一个元素
public void addFirst(E e) {
addBefore(e, header.next);
}
public void addLast(E e) {
addBefore(e, header);
}
在头部或尾部加一个元素
public boolean add(E e) {
addBefore(e, header);
return true;
}
默认的add()方法是在链表的尾部加一个元素
public boolean remove(Object o) {
if (o==null) {
for (Entry<E> e = header.next; e != header; e = e.next) {
if (e.element==null) {
remove(e);
return true;
}
}
} else {
for (Entry<E> e = header.next; e != header; e = e.next) {
if (o.equals(e.element)) {
remove(e);
return true;
}
}
}
return false;
}
public E get(int index) {
return entry(index).element;
}
get()方法得到某个值,调用entry()方法,如下所示:
private Entry<E> entry(int index) {
if (index < 0 || index >= size)
throw new IndexOutOfBoundsException("Index: "+index+
", Size: "+size);
Entry<E> e = header;
if (index < (size >> 1)) {
for (int i = 0; i <= index; i++)
e = e.next;
} else {
for (int i = size; i > index; i--)
e = e.previous;
}
return e;
}
说明该链表是双向链表,并且是环形的,头结点为空值,没有具体的值