ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/main/java/util/LinkedList.java
(Generate patch)

Comparing jsr166/src/main/java/util/LinkedList.java (file contents):
Revision 1.36 by jsr166, Sat Jun 18 01:56:01 2005 UTC vs.
Revision 1.43 by jsr166, Tue Jan 10 21:32:09 2006 UTC

# Line 1 | Line 1
1   /*
2   * %W% %E%
3   *
4 < * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
4 > * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
5   * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
6   */
7  
8   package java.util;
9 < import java.util.*; // for javadoc
9 > import java.util.*; // for javadoc (till 6280605 is fixed)
10  
11   /**
12   * Linked list implementation of the <tt>List</tt> interface.  Implements all
# Line 26 | Line 26 | import java.util.*; // for javadoc
26   * list.  Operations that index into the list will traverse the list from
27   * the beginning or the end, whichever is closer to the specified index.<p>
28   *
29 < * <b>Note that this implementation is not synchronized.</b> If multiple
30 < * threads access a list concurrently, and at least one of the threads
31 < * modifies the list structurally, it <i>must</i> be synchronized
32 < * externally.  (A structural modification is any operation that adds or
33 < * deletes one or more elements; merely setting the value of an element is not
34 < * a structural modification.)  This is typically accomplished by
35 < * synchronizing on some object that naturally encapsulates the list.  If no
36 < * such object exists, the list should be "wrapped" using the
37 < * Collections.synchronizedList method.  This is best done at creation time,
38 < * to prevent accidental unsynchronized access to the list: <pre>
39 < *     List list = Collections.synchronizedList(new LinkedList(...));
40 < * </pre>
29 > * <p><strong>Note that this implementation is not synchronized.</strong>
30 > * If multiple threads access a linked list concurrently, and at least
31 > * one of the threads modifies the list structurally, it <i>must</i> be
32 > * synchronized externally.  (A structural modification is any operation
33 > * that adds or deletes one or more elements; merely setting the value of
34 > * an element is not a structural modification.)  This is typically
35 > * accomplished by synchronizing on some object that naturally
36 > * encapsulates the list.
37 > *
38 > * If no such object exists, the list should be "wrapped" using the
39 > * {@link Collections#synchronizedList Collections.synchronizedList}
40 > * method.  This is best done at creation time, to prevent accidental
41 > * unsynchronized access to the list:<pre>
42 > *   List list = Collections.synchronizedList(new LinkedList(...));</pre>
43   *
44   * <p>The iterators returned by this class's <tt>iterator</tt> and
45   * <tt>listIterator</tt> methods are <i>fail-fast</i>: if the list is
# Line 66 | Line 68 | import java.util.*; // for javadoc
68   * @see     List
69   * @see     ArrayList
70   * @see     Vector
69 * @see     Collections#synchronizedList(List)
71   * @since 1.2
72   * @param <E> the type of elements held in this collection
73   */
# Line 192 | Line 193 | public class LinkedList<E>
193       * <p>This method is equivalent to {@link #addLast}.
194       *
195       * @param e element to be appended to this list
196 <     * @return <tt>true</tt> (as per the spec for {@link Collection#add})
196 >     * @return <tt>true</tt> (as specified by {@link Collection#add})
197       */
198      public boolean add(E e) {
199          addBefore(e, header);
# Line 485 | Line 486 | public class LinkedList<E>
486       * Adds the specified element as the tail (last element) of this list.
487       *
488       * @param e the element to add
489 <     * @return <tt>true</tt> (as per the spec for {@link Queue#offer})
489 >     * @return <tt>true</tt> (as specified by {@link Queue#offer})
490       * @since 1.5
491       */
492      public boolean offer(E e) {
# Line 497 | Line 498 | public class LinkedList<E>
498       * Inserts the specified element at the front of this list.
499       *
500       * @param e the element to insert
501 <     * @return <tt>true</tt> (as per the spec for {@link Deque#offerFirst})
501 >     * @return <tt>true</tt> (as specified by {@link Deque#offerFirst})
502       * @since 1.6
503       */
504      public boolean offerFirst(E e) {
# Line 509 | Line 510 | public class LinkedList<E>
510       * Inserts the specified element at the end of this list.
511       *
512       * @param e the element to insert
513 <     * @return <tt>true</tt> (as per the spec for {@link Deque#offerLast})
513 >     * @return <tt>true</tt> (as specified by {@link Deque#offerLast})
514       * @since 1.6
515       */
516      public boolean offerLast(E e) {
# Line 546 | Line 547 | public class LinkedList<E>
547      }
548  
549      /**
550 <     * Retrieves and removes the first element of this list, or
551 <     * <tt>null</tt> if this list is empty.
550 >     * Retrieves and removes the first element of this list,
551 >     * or returns <tt>null</tt> if this list is empty.
552       *
553       * @return the first element of this list, or <tt>null</tt> if
554       *     this list is empty
# Line 560 | Line 561 | public class LinkedList<E>
561      }
562  
563      /**
564 <     * Retrieves and removes the last element of this list, or
565 <     * <tt>null</tt> if this list is empty.
564 >     * Retrieves and removes the last element of this list,
565 >     * or returns <tt>null</tt> if this list is empty.
566       *
567       * @return the last element of this list, or <tt>null</tt> if
568       *     this list is empty
# Line 798 | Line 799 | public class LinkedList<E>
799      }
800  
801      /**
802 +     * @since 1.6
803 +     */
804 +    public Iterator<E> descendingIterator() {
805 +        return new DescendingIterator();
806 +    }
807 +
808 +    /** Adapter to provide descending iterators via ListItr.previous */
809 +    private class DescendingIterator implements Iterator {
810 +        final ListItr itr = new ListItr(size());
811 +        public boolean hasNext() {
812 +            return itr.hasPrevious();
813 +        }
814 +        public E next() {
815 +            return itr.previous();
816 +        }
817 +        public void remove() {
818 +            itr.remove();
819 +        }
820 +    }
821 +
822 +    /**
823       * Returns a shallow copy of this <tt>LinkedList</tt>. (The elements
824       * themselves are not cloned.)
825       *

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines