int index = size;
if (o == null) {
for (Node<E> x = last; x != null; x = x.prev) {
index--;
if (x.item == null)
return index;
}
} else {
for (Node<E> x = last; x != null; x = x.prev) {
index--;
if (o.equals(x.item))
return index;
}
}
return -1;
}
这个方法之前说过好多次类似逻辑了,不细说了,太简单。
public E peek() {
final Node<E> f = first;
return (f == null) ? null : f.item;
}
这个方法就是获取第一个元素的内容。
public E element() {
return getFirst();
}
element方法直接返回getFirst方法。
就是获取第一个元素的方法,与上面peek方法不同的是,peek方法如果第一个元素为空,就返回空值,getFirst方法第一个元素为空则抛出异常。
public E poll() {
final Node<E> f = first;
return (f == null) ? null : unlinkFirst(f);
}
这个方法也是返回第一个元素的内容,区别是会将第一个元素从链表中踢出。
public E remove() {
return removeFirst();
}
这个方法就是删除第一个元素。
public boolean offer(E e) {
return add(e);
}
这个方法就是添加一个元素。
public boolean offerFirst(E e) {
addFirst(e);
return true;
}
这个方法就是在链表首部添加一个元素。
public boolean offerLast(E e) {
addLast(e);
return true;
}
这个方法就是在链表尾部添加一个元素。
public E peekFirst() {
final Node<E> f = first;
return (f == null) ? null : f.item;
}
public E peekLast() {
final Node<E> l = last;
return (l == null) ? null : l.item;
}
public E pollFirst() {
final Node<E> f = first;
return (f == null) ? null : unlinkFirst(f);
}
public E pollLast() {
final Node<E> l = last;
return (l == null) ? null : unlinkLast(l);
}
public E pop() {
return removeFirst();
}
public boolean removeFirstOccurrence(Object o) {
return remove(o);
}
public boolean removeLastOccurrence(Object o) {
if (o == null) {
for (Node<E> x = last; x != null; x = x.prev) {
if (x.item == null) {
unlink(x);
return true;
}
}
} else {
for (Node<E> x = last; x != null; x = x.prev) {
if (o.equals(x.item)) {
unlink(x);
return true;
}
}
}
return false;
}
这几个方法和上面的都重复,不说了。