Collection

 

 

——Map(HashMap,LinkedHashMap,TreeMap,SortedMap)

——List(ArrayList,LinkedList)

——Set(HashSet,LinkedHashSet,TreeSet,SortedSet)

 

==============================================================================================================

Collection.java

 

package java.util;

 

public interface Collection<E> extends Iterable<E> {

 

    int size();

    boolean isEmpty();

    boolean contains(Object o);

    Iterator<E> iterator();

    Object[] toArray();

    <T> T[] toArray(T[] a);

 

    boolean add(E e);

    boolean remove(Object o);

 

    boolean containsAll(Collection<?> c);

    boolean addAll(Collection<? extends E> c);

 

    boolean removeAll(Collection<?> c);

    boolean retainAll(Collection<?> c);

    void clear();

 

    boolean equals(Object o);

    int hashCode();

}

 

 

AbstractCollection.java

 

package java.util;

 

 

public abstract class AbstractCollection<E> implements Collection<E> {

 

    protected AbstractCollection() {

    }

 

    public abstract Iterator<E> iterator();

 

    public abstract int size();

 

    public boolean isEmpty() {

        return size() == 0;

    }

 

    /**

     * @throws ClassCastException {@inheritDoc}

     * @throws NullPointerException {@inheritDoc}

     */

    public boolean contains(Object o) {

        Iterator<E> it = iterator();

        if (o==null) {

            while (it.hasNext())

                if (it.next()==null)

                    return true;

        } else {

            while (it.hasNext())

                if (o.equals(it.next()))

                    return true;

        }

        return false;

    }

 

    public Object[] toArray() {

        // Estimate size of array; be prepared to see more or fewer elements

        Object[] r = new Object[size()];

        Iterator<E> it = iterator();

        for (int i = 0; i < r.length; i++) {

            if (! it.hasNext()) // fewer elements than expected

                return Arrays.copyOf(r, i);

 

copyOf(int[] original, int newLength) 
          复制指定的数组,截取或用 0 填充(如有必要),以使副本具有指定的长度。

            r[i] = it.next();

        }

        return it.hasNext() ? finishToArray(r, it) : r;

    }

 

    /**

     * @throws ArrayStoreException {@inheritDoc}

     * @throws NullPointerException {@inheritDoc}

     */

    public <T> T[] toArray(T[] a) {

        // Estimate size of array; be prepared to see more or fewer elements

        int size = size();

        T[] r = a.length >= size ? a :

                  (T[])java.lang.reflect.Array

                  .newInstance(a.getClass().getComponentType(), size);

        Iterator<E> it = iterator();

 

        for (int i = 0; i < r.length; i++) {

            if (! it.hasNext()) { // fewer elements than expected

                if (a != r)

                    return Arrays.copyOf(r, i);

                r[i] = null; // null-terminate

                return r;

            }

            r[i] = (T)it.next();

        }

        return it.hasNext() ? finishToArray(r, it) : r;

    }

 

    /**

     * The maximum size of array to allocate.

     * Some VMs reserve some header words in an array.

     * Attempts to allocate larger arrays may result in

     * OutOfMemoryError: Requested array size exceeds VM limit

     */

 

 

    private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;

 

    /**

     * Reallocates the array being used within toArray when the iterator

     * returned more elements than expected, and finishes filling it from

     * the iterator.

     *

     * @param r the array, replete with previously stored elements

     * @param it the in-progress iterator over this collection

     * @return array containing the elements in the given array, plus any

     * further elements returned by the iterator, trimmed to size

     */

    private static <T> T[] finishToArray(T[] r, Iterator<?> it) {

        int i = r.length;

        while (it.hasNext()) {

            int cap = r.length;

            if (i == cap) {

                int newCap = cap + (cap >> 1) + 1;

                // overflow-conscious code

                if (newCap - MAX_ARRAY_SIZE > 0)

                    newCap = hugeCapacity(cap + 1);

                r = Arrays.copyOf(r, newCap);

            }

            r[i++] = (T)it.next();

        }

        // trim if overallocated

        return (i == r.length) ? r : Arrays.copyOf(r, i);

    }

 

    private static int hugeCapacity(int minCapacity) {

        if (minCapacity < 0) // overflow

            throw new OutOfMemoryError

                ("Required array size too large");

        return (minCapacity > MAX_ARRAY_SIZE) ?

            Integer.MAX_VALUE :

            MAX_ARRAY_SIZE;

    }

 

    // Modification Operations

 

    /**

     * {@inheritDoc}

     *

     * <p>This implementation always throws an

     * <tt>UnsupportedOperationException</tt>.

     *

     * @throws UnsupportedOperationException {@inheritDoc}

     * @throws ClassCastException {@inheritDoc}

     * @throws NullPointerException {@inheritDoc}

     * @throws IllegalArgumentException {@inheritDoc}

     * @throws IllegalStateException {@inheritDoc}

     */

    public boolean add(E e) {

        throw new UnsupportedOperationException();

    }

 

    /**

     * {@inheritDoc}

     *

     * <p>This implementation iterates over the collection looking for the

     * specified element. If it finds the element, it removes the element

     * from the collection using the iterator's remove method.

     *

     * <p>Note that this implementation throws an

     * <tt>UnsupportedOperationException</tt> if the iterator returned by this

     * collection's iterator method does not implement the <tt>remove</tt>

     * method and this collection contains the specified object.

     *

     * @throws UnsupportedOperationException {@inheritDoc}

     * @throws ClassCastException {@inheritDoc}

     * @throws NullPointerException {@inheritDoc}

     */

    public boolean remove(Object o) {

        Iterator<E> it = iterator();

        if (o==null) {

            while (it.hasNext()) {

                if (it.next()==null) {

                    it.remove();

                    return true;

                }

            }

        } else {

            while (it.hasNext()) {

                if (o.equals(it.next())) {

                    it.remove();

                    return true;

                }

            }

        }

        return false;

    }

 

 

    // Bulk Operations

 

    /**

     * {@inheritDoc}

     *

     * <p>This implementation iterates over the specified collection,

     * checking each element returned by the iterator in turn to see

     * if it's contained in this collection. If all elements are so

     * contained <tt>true</tt> is returned, otherwise <tt>false</tt>.

     *

     * @throws ClassCastException {@inheritDoc}

     * @throws NullPointerException {@inheritDoc}

     * @see #contains(Object)

     */

    public boolean containsAll(Collection<?> c) {

        for (Object e : c)

            if (!contains(e))

                return false;

        return true;

    }

 

    /**

     * {@inheritDoc}

     *

     * <p>This implementation iterates over the specified collection, and adds

     * each object returned by the iterator to this collection, in turn.

     *

     * <p>Note that this implementation will throw an

     * <tt>UnsupportedOperationException</tt> unless <tt>add</tt> is

     * overridden (assuming the specified collection is non-empty).

     *

     * @throws UnsupportedOperationException {@inheritDoc}

     * @throws ClassCastException {@inheritDoc}

     * @throws NullPointerException {@inheritDoc}

     * @throws IllegalArgumentException {@inheritDoc}

     * @throws IllegalStateException {@inheritDoc}

     *

     * @see #add(Object)

     */

    public boolean addAll(Collection<? extends E> c) {

        boolean modified = false;

        for (E e : c)

            if (add(e))

                modified = true;

        return modified;

    }

 

    /**

     * {@inheritDoc}

     *

     * <p>This implementation iterates over this collection, checking each

     * element returned by the iterator in turn to see if it's contained

     * in the specified collection. If it's so contained, it's removed from

     * this collection with the iterator's <tt>remove</tt> method.

     *

     * <p>Note that this implementation will throw an

     * <tt>UnsupportedOperationException</tt> if the iterator returned by the

     * <tt>iterator</tt> method does not implement the <tt>remove</tt> method

     * and this collection contains one or more elements in common with the

     * specified collection.

     *

     * @throws UnsupportedOperationException {@inheritDoc}

     * @throws ClassCastException {@inheritDoc}

     * @throws NullPointerException {@inheritDoc}

     *

     * @see #remove(Object)

     * @see #contains(Object)

     */

    public boolean removeAll(Collection<?> c) {

        boolean modified = false;

        Iterator<?> it = iterator();

        while (it.hasNext()) {

            if (c.contains(it.next())) {

                it.remove();

                modified = true;

            }

        }

        return modified;

    }

 

    /**

     * {@inheritDoc}

     *

     * <p>This implementation iterates over this collection, checking each

     * element returned by the iterator in turn to see if it's contained

     * in the specified collection. If it's not so contained, it's removed

     * from this collection with the iterator's <tt>remove</tt> method.

     *

     * <p>Note that this implementation will throw an

     * <tt>UnsupportedOperationException</tt> if the iterator returned by the

     * <tt>iterator</tt> method does not implement the <tt>remove</tt> method

     * and this collection contains one or more elements not present in the

     * specified collection.

     *

     * @throws UnsupportedOperationException {@inheritDoc}

     * @throws ClassCastException {@inheritDoc}

     * @throws NullPointerException {@inheritDoc}

     *

     * @see #remove(Object)

     * @see #contains(Object)

     */

    public boolean retainAll(Collection<?> c) {

        boolean modified = false;

        Iterator<E> it = iterator();

        while (it.hasNext()) {

            if (!c.contains(it.next())) {//如果不属于C的就删除。

                it.remove();

                modified = true;

            }

        }

        return modified;

    }

 

    /**

     * {@inheritDoc}

     *

     * <p>This implementation iterates over this collection, removing each

     * element using the <tt>Iterator.remove</tt> operation. Most

     * implementations will probably choose to override this method for

     * efficiency.

     *

     * <p>Note that this implementation will throw an

     * <tt>UnsupportedOperationException</tt> if the iterator returned by this

     * collection's <tt>iterator</tt> method does not implement the

     * <tt>remove</tt> method and this collection is non-empty.

     *

     * @throws UnsupportedOperationException {@inheritDoc}

     */

    public void clear() {

        Iterator<E> it = iterator();

        while (it.hasNext()) {

            it.next();

            it.remove();

        }

    }

 

 

    // String conversion

 

    /**

     * Returns a string representation of this collection. The string

     * representation consists of a list of the collection's elements in the

     * order they are returned by its iterator, enclosed in square brackets

     * (<tt>"[]"</tt>). Adjacent elements are separated by the characters

     * <tt>", "</tt> (comma and space). Elements are converted to strings as

     * by {@link String#valueOf(Object)}.

     *

     * @return a string representation of this collection

     */

    public String toString() {

        Iterator<E> it = iterator();

        if (! it.hasNext())//迭代器已经是最后一个

            return "[]";

 

        StringBuilder sb = new StringBuilder();

        sb.append('[');

        for (;;) {

            E e = it.next();

            sb.append(e == this ? "(this Collection)" : e);

            if (! it.hasNext())

                return sb.append(']').toString();

            sb.append(',').append(' ');

        }

    }

 

}

Iterator接口

Iterator.java

 

package java.util;

 

public interface Iterator<E> {

 

    boolean hasNext();

    E next();

    void remove();

}

 

 

 

ListIterator.java

 

package java.util;

 

public interface ListIterator<E> extends Iterator<E> {

 

    boolean hasNext();

 

    E next();

    boolean hasPrevious();

 

    E previous();

 

    int nextIndex();

 

    int previousIndex();

 

    void remove();

 

    void set(E e);

 

    void add(E e);

}

 

 

 

 

 

 

posted @ 2015-07-09 00:42  Uncle_Nucky  阅读(142)  评论(0)    收藏  举报