AbstractCollection.java in  » 6.0-JDK-Core » Collections-Jar-Zip-Logging-regex » java » util » Java Source Code / Java Documentation Java Source Code and Java Documentation

Home
Java Source Code / Java Documentation
1.6.0 JDK Core
2.6.0 JDK Modules
3.6.0 JDK Modules com.sun
4.6.0 JDK Modules com.sun.java
5.6.0 JDK Modules sun
6.6.0 JDK Platform
7.Ajax
8.Apache Harmony Java SE
9.Aspect oriented
10.Authentication Authorization
11.Blogger System
12.Build
13.Byte Code
14.Cache
15.Chart
16.Chat
17.Code Analyzer
18.Collaboration
19.Content Management System
20.Database Client
21.Database DBMS
22.Database JDBC Connection Pool
23.Database ORM
24.Development
25.EJB Server
26.ERP CRM Financial
27.ESB
28.Forum
29.Game
30.GIS
31.Graphic 3D
32.Graphic Library
33.Groupware
34.HTML Parser
35.IDE
36.IDE Eclipse
37.IDE Netbeans
38.Installer
39.Internationalization Localization
40.Inversion of Control
41.Issue Tracking
42.J2EE
43.J2ME
44.JBoss
45.JMS
46.JMX
47.Library
48.Mail Clients
49.Music
50.Natural Language Processing
51.Net
52.Parser
53.PDF
54.Portal
55.Profiler
56.Project Management
57.Report
58.RSS RDF
59.Rule Engine
60.Science
61.Scripting
62.Search Engine
63.Security
64.Sevlet Container
65.Source Control
66.Swing Library
67.Template Engine
68.Test Coverage
69.Testing
70.UML
71.Web Crawler
72.Web Framework
73.Web Mail
74.Web Server
75.Web Services
76.Web Services apache cxf 2.2.6
77.Web Services AXIS2
78.Wiki Engine
79.Workflow Engines
80.XML
81.XML UI
Java Source Code / Java Documentation  » 6.0 JDK Core » Collections Jar Zip Logging regex » java.util 
Source Cross Referenced  Class Diagram Java Document (Java Doc) 


        /*
         * Copyright 1997-2006 Sun Microsystems, Inc.  All Rights Reserved.
         * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
         *
         * This code is free software; you can redistribute it and/or modify it
         * under the terms of the GNU General Public License version 2 only, as
         * published by the Free Software Foundation.  Sun designates this
         * particular file as subject to the "Classpath" exception as provided
         * by Sun in the LICENSE file that accompanied this code.
         *
         * This code is distributed in the hope that it will be useful, but WITHOUT
         * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
         * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
         * version 2 for more details (a copy is included in the LICENSE file that
         * accompanied this code).
         *
         * You should have received a copy of the GNU General Public License version
         * 2 along with this work; if not, write to the Free Software Foundation,
         * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
         *
         * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
         * CA 95054 USA or visit www.sun.com if you need additional information or
         * have any questions.
         */

        package java.util;

        /**
         * This class provides a skeletal implementation of the <tt>Collection</tt>
         * interface, to minimize the effort required to implement this interface. <p>
         *
         * To implement an unmodifiable collection, the programmer needs only to
         * extend this class and provide implementations for the <tt>iterator</tt> and
         * <tt>size</tt> methods.  (The iterator returned by the <tt>iterator</tt>
         * method must implement <tt>hasNext</tt> and <tt>next</tt>.)<p>
         *
         * To implement a modifiable collection, the programmer must additionally
         * override this class's <tt>add</tt> method (which otherwise throws an
         * <tt>UnsupportedOperationException</tt>), and the iterator returned by the
         * <tt>iterator</tt> method must additionally implement its <tt>remove</tt>
         * method.<p>
         *
         * The programmer should generally provide a void (no argument) and
         * <tt>Collection</tt> constructor, as per the recommendation in the
         * <tt>Collection</tt> interface specification.<p>
         *
         * The documentation for each non-abstract method in this class describes its
         * implementation in detail.  Each of these methods may be overridden if
         * the collection being implemented admits a more efficient implementation.<p>
         *
         * This class is a member of the
         * <a href="{@docRoot}/../technotes/guides/collections/index.html">
         * Java Collections Framework</a>.
         *
         * @author  Josh Bloch
         * @author  Neal Gafter
         * @version 1.44, 05/05/07
         * @see Collection
         * @since 1.2
         */

        public abstract class AbstractCollection<E> implements  Collection<E> {
            /**
             * Sole constructor.  (For invocation by subclass constructors, typically
             * implicit.)
             */
            protected AbstractCollection() {
            }

            // Query Operations

            /**
             * Returns an iterator over the elements contained in this collection.
             *
             * @return an iterator over the elements contained in this collection
             */
            public abstract Iterator<E> iterator();

            public abstract int size();

            /**
             * {@inheritDoc}
             *
             * <p>This implementation returns <tt>size() == 0</tt>.
             */
            public boolean isEmpty() {
                return size() == 0;
            }

            /**
             * {@inheritDoc}
             *
             * <p>This implementation iterates over the elements in the collection,
             * checking each element in turn for equality with the specified element.
             *
             * @throws ClassCastException   {@inheritDoc}
             * @throws NullPointerException {@inheritDoc}
             */
            public boolean contains(Object o) {
                Iterator<E> e = iterator();
                if (o == null) {
                    while (e.hasNext())
                        if (e.next() == null)
                            return true;
                } else {
                    while (e.hasNext())
                        if (o.equals(e.next()))
                            return true;
                }
                return false;
            }

            /**
             * {@inheritDoc}
             *
             * <p>This implementation returns an array containing all the elements
             * returned by this collection's iterator, in the same order, stored in
             * consecutive elements of the array, starting with index {@code 0}.
             * The length of the returned array is equal to the number of elements
             * returned by the iterator, even if the size of this collection changes
             * during iteration, as might happen if the collection permits
             * concurrent modification during iteration.  The {@code size} method is
             * called only as an optimization hint; the correct result is returned
             * even if the iterator returns a different number of elements.
             *
             * <p>This method is equivalent to:
             *
             *  <pre> {@code
             * List<E> list = new ArrayList<E>(size());
             * for (E e : this)
             *     list.add(e);
             * return list.toArray();
             * }</pre>
             */
            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);
                    r[i] = it.next();
                }
                return it.hasNext() ? finishToArray(r, it) : r;
            }

            /**
             * {@inheritDoc}
             *
             * <p>This implementation returns an array containing all the elements
             * returned by this collection's iterator in the same order, stored in
             * consecutive elements of the array, starting with index {@code 0}.
             * If the number of elements returned by the iterator is too large to
             * fit into the specified array, then the elements are returned in a
             * newly allocated array with length equal to the number of elements
             * returned by the iterator, even if the size of this collection
             * changes during iteration, as might happen if the collection permits
             * concurrent modification during iteration.  The {@code size} method is
             * called only as an optimization hint; the correct result is returned
             * even if the iterator returns a different number of elements.
             *
             * <p>This method is equivalent to:
             *
             *  <pre> {@code
             * List<E> list = new ArrayList<E>(size());
             * for (E e : this)
             *     list.add(e);
             * return list.toArray(a);
             * }</pre>
             *
             * @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;
            }

            /**
             * 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 / 2) + 1) * 3;
                        if (newCap <= cap) { // integer overflow
                            if (cap == Integer.MAX_VALUE)
                                throw new OutOfMemoryError(
                                        "Required array size too large");
                            newCap = Integer.MAX_VALUE;
                        }
                        r = Arrays.copyOf(r, newCap);
                    }
                    r[i++] = (T) it.next();
                }
                // trim if overallocated
                return (i == r.length) ? r : Arrays.copyOf(r, i);
            }

            // 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> e = iterator();
                if (o == null) {
                    while (e.hasNext()) {
                        if (e.next() == null) {
                            e.remove();
                            return true;
                        }
                    }
                } else {
                    while (e.hasNext()) {
                        if (o.equals(e.next())) {
                            e.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) {
                Iterator<?> e = c.iterator();
                while (e.hasNext())
                    if (!contains(e.next()))
                        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;
                Iterator<? extends E> e = c.iterator();
                while (e.hasNext()) {
                    if (add(e.next()))
                        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<?> e = iterator();
                while (e.hasNext()) {
                    if (c.contains(e.next())) {
                        e.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> e = iterator();
                while (e.hasNext()) {
                    if (!c.contains(e.next())) {
                        e.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> e = iterator();
                while (e.hasNext()) {
                    e.next();
                    e.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> i = iterator();
                if (!i.hasNext())
                    return "[]";

                StringBuilder sb = new StringBuilder();
                sb.append('[');
                for (;;) {
                    E e = i.next();
                    sb.append(e == this  ? "(this Collection)" : e);
                    if (!i.hasNext())
                        return sb.append(']').toString();
                    sb.append(", ");
                }
            }

        }
ww_w___.___j__a_va2___s_._c__o___m_ | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.