@Override @SuppressWarnings("unchecked") public <T> T[] toArray(T[] array) { // Extend the array if needed if (array.length < size) { final Class<?> componentType = array.getClass().getComponentType(); array = (T[]) Array.newInstance(componentType, size); } // Copy the values into the array int i = 0; for (Node<E> node = header.next; node != header; node = node.next, i++) { array[i] = (T) node.getValue(); } // Set the value after the last value to null if (array.length > size) { array[size] = null; } return array; }
public E getLast() { final Node<E> node = header.previous; if (node == header) { throw new NoSuchElementException(); } return node.getValue(); }
public E getFirst() { final Node<E> node = header.next; if (node == header) { throw new NoSuchElementException(); } return node.getValue(); }
@Override public E previous() { checkModCount(); if (!hasPrevious()) { throw new NoSuchElementException("Already at start of list."); } next = next.previous; final E value = next.getValue(); current = next; nextIndex--; return value; }
public E removeFirst() { final Node<E> node = header.next; if (node == header) { throw new NoSuchElementException(); } final E oldValue = node.getValue(); removeNode(node); return oldValue; }
@Override public E set(final int index, final E value) { final Node<E> node = getNode(index, false); final E oldValue = node.getValue(); updateNode(node, value); return oldValue; }
@Override public int lastIndexOf(final Object value) { int i = size - 1; for (Node<E> node = header.previous; node != header; node = node.previous) { if (isEqualValue(node.getValue(), value)) { return i; } i--; } return -1; }
@Override public E next() { checkModCount(); if (!hasNext()) { throw new NoSuchElementException("No element at index " + nextIndex + "."); } final E value = next.getValue(); current = next; next = next.next; nextIndex++; return value; }
public E removeLast() { final Node<E> node = header.previous; if (node == header) { throw new NoSuchElementException(); } final E oldValue = node.getValue(); removeNode(node); return oldValue; }
@Override public E get(final int index) { final Node<E> node = getNode(index, false); return node.getValue(); }
@Override public E remove(final int index) { final Node<E> node = getNode(index, false); final E oldValue = node.getValue(); removeNode(node); return oldValue; }
@Override public int indexOf(final Object value) { int i = 0; for (Node<E> node = header.next; node != header; node = node.next) { if (isEqualValue(node.getValue(), value)) { return i; } i++; } return -1; }
@Override public boolean remove(final Object value) { for (Node<E> node = header.next; node != header; node = node.next) { if (isEqualValue(node.getValue(), value)) { removeNode(node); return true; } } return false; }