| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package java.util; |
| |
| |
| /** |
| * {@code Collection} is the root of the collection hierarchy. It defines operations on |
| * data collections and the behavior that they will have in all implementations |
| * of {@code Collection}s. |
| * |
| * All direct or indirect implementations of {@code Collection} should implement at |
| * least two constructors. One with no parameters which creates an empty |
| * collection and one with a parameter of type {@code Collection}. This second |
| * constructor can be used to create a collection of different type as the |
| * initial collection but with the same elements. Implementations of {@code Collection} |
| * cannot be forced to implement these two constructors but at least all |
| * implementations under {@code java.util} do. |
| * |
| * Methods that change the content of a collection throw an |
| * {@code UnsupportedOperationException} if the underlying collection does not |
| * support that operation, though it's not mandatory to throw such an {@code Exception} |
| * in cases where the requested operation would not change the collection. In |
| * these cases it's up to the implementation whether it throws an |
| * {@code UnsupportedOperationException} or not. |
| * |
| * Methods marked with (optional) can throw an |
| * {@code UnsupportedOperationException} if the underlying collection doesn't |
| * support that method. |
| */ |
| public interface Collection<E> extends Iterable<E> { |
| |
| /** |
| * Attempts to add {@code object} to the contents of this |
| * {@code Collection} (optional). |
| * |
| * After this method finishes successfully it is guaranteed that the object |
| * is contained in the collection. |
| * |
| * If the collection was modified it returns {@code true}, {@code false} if |
| * no changes were made. |
| * |
| * An implementation of {@code Collection} may narrow the set of accepted |
| * objects, but it has to specify this in the documentation. If the object |
| * to be added does not meet this restriction, then an |
| * {@code IllegalArgumentException} is thrown. |
| * |
| * If a collection does not yet contain an object that is to be added and |
| * adding the object fails, this method <i>must</i> throw an appropriate |
| * unchecked Exception. Returning false is not permitted in this case |
| * because it would violate the postcondition that the element will be part |
| * of the collection after this method finishes. |
| * |
| * @param object |
| * the object to add. |
| * @return {@code true} if this {@code Collection} is |
| * modified, {@code false} otherwise. |
| * |
| * @throws UnsupportedOperationException |
| * if adding to this {@code Collection} is not supported. |
| * @throws ClassCastException |
| * if the class of the object is inappropriate for this |
| * collection. |
| * @throws IllegalArgumentException |
| * if the object cannot be added to this {@code Collection}. |
| * @throws NullPointerException |
| * if null elements cannot be added to the {@code Collection}. |
| */ |
| public boolean add(E object); |
| |
| /** |
| * Attempts to add all of the objects contained in {@code Collection} |
| * to the contents of this {@code Collection} (optional). If the passed {@code Collection} |
| * is changed during the process of adding elements to this {@code Collection}, the |
| * behavior is not defined. |
| * |
| * @param collection |
| * the {@code Collection} of objects. |
| * @return {@code true} if this {@code Collection} is modified, {@code false} |
| * otherwise. |
| * @throws UnsupportedOperationException |
| * if adding to this {@code Collection} is not supported. |
| * @throws ClassCastException |
| * if the class of an object is inappropriate for this |
| * {@code Collection}. |
| * @throws IllegalArgumentException |
| * if an object cannot be added to this {@code Collection}. |
| * @throws NullPointerException |
| * if {@code collection} is {@code null}, or if it |
| * contains {@code null} elements and this {@code Collection} does |
| * not support such elements. |
| */ |
| public boolean addAll(Collection<? extends E> collection); |
| |
| /** |
| * Removes all elements from this {@code Collection}, leaving it empty (optional). |
| * |
| * @throws UnsupportedOperationException |
| * if removing from this {@code Collection} is not supported. |
| * |
| * @see #isEmpty |
| * @see #size |
| */ |
| public void clear(); |
| |
| /** |
| * Tests whether this {@code Collection} contains the specified object. Returns |
| * {@code true} if and only if at least one element {@code elem} in this |
| * {@code Collection} meets following requirement: |
| * {@code (object==null ? elem==null : object.equals(elem))}. |
| * |
| * @param object |
| * the object to search for. |
| * @return {@code true} if object is an element of this {@code Collection}, |
| * {@code false} otherwise. |
| * @throws ClassCastException |
| * if the object to look for isn't of the correct |
| * type. |
| * @throws NullPointerException |
| * if the object to look for is {@code null} and this |
| * {@code Collection} doesn't support {@code null} elements. |
| */ |
| public boolean contains(Object object); |
| |
| /** |
| * Tests whether this {@code Collection} contains all objects contained in the |
| * specified {@code Collection}. If an element {@code elem} is contained several |
| * times in the specified {@code Collection}, the method returns {@code true} even |
| * if {@code elem} is contained only once in this {@code Collection}. |
| * |
| * @param collection |
| * the collection of objects. |
| * @return {@code true} if all objects in the specified {@code Collection} are |
| * elements of this {@code Collection}, {@code false} otherwise. |
| * @throws ClassCastException |
| * if one or more elements of {@code collection} isn't of the |
| * correct type. |
| * @throws NullPointerException |
| * if {@code collection} contains at least one {@code null} |
| * element and this {@code Collection} doesn't support {@code null} |
| * elements. |
| * @throws NullPointerException |
| * if {@code collection} is {@code null}. |
| */ |
| public boolean containsAll(Collection<?> collection); |
| |
| /** |
| * Compares the argument to the receiver, and returns true if they represent |
| * the <em>same</em> object using a class specific comparison. |
| * |
| * @param object |
| * the object to compare with this object. |
| * @return {@code true} if the object is the same as this object and |
| * {@code false} if it is different from this object. |
| * @see #hashCode |
| */ |
| public boolean equals(Object object); |
| |
| /** |
| * Returns an integer hash code for the receiver. Objects which are equal |
| * return the same value for this method. |
| * |
| * @return the receiver's hash. |
| * |
| * @see #equals |
| */ |
| public int hashCode(); |
| |
| /** |
| * Returns if this {@code Collection} contains no elements. |
| * |
| * @return {@code true} if this {@code Collection} has no elements, {@code false} |
| * otherwise. |
| * |
| * @see #size |
| */ |
| public boolean isEmpty(); |
| |
| /** |
| * Returns an instance of {@link Iterator} that may be used to access the |
| * objects contained by this {@code Collection}. The order in which the elements are |
| * returned by the iterator is not defined. Only if the instance of the |
| * {@code Collection} has a defined order the elements are returned in that order. |
| * |
| * @return an iterator for accessing the {@code Collection} contents. |
| */ |
| public Iterator<E> iterator(); |
| |
| /** |
| * Removes one instance of the specified object from this {@code Collection} if one |
| * is contained (optional). The element {@code elem} that is removed |
| * complies with {@code (object==null ? elem==null : object.equals(elem)}. |
| * |
| * @param object |
| * the object to remove. |
| * @return {@code true} if this {@code Collection} is modified, {@code false} |
| * otherwise. |
| * @throws UnsupportedOperationException |
| * if removing from this {@code Collection} is not supported. |
| * @throws ClassCastException |
| * if the object passed is not of the correct type. |
| * @throws NullPointerException |
| * if {@code object} is {@code null} and this {@code Collection} |
| * doesn't support {@code null} elements. |
| */ |
| public boolean remove(Object object); |
| |
| /** |
| * Removes all occurrences in this {@code Collection} of each object in the |
| * specified {@code Collection} (optional). After this method returns none of the |
| * elements in the passed {@code Collection} can be found in this {@code Collection} |
| * anymore. |
| * |
| * @param collection |
| * the collection of objects to remove. |
| * @return {@code true} if this {@code Collection} is modified, {@code false} |
| * otherwise. |
| * |
| * @throws UnsupportedOperationException |
| * if removing from this {@code Collection} is not supported. |
| * @throws ClassCastException |
| * if one or more elements of {@code collection} |
| * isn't of the correct type. |
| * @throws NullPointerException |
| * if {@code collection} contains at least one |
| * {@code null} element and this {@code Collection} doesn't support |
| * {@code null} elements. |
| * @throws NullPointerException |
| * if {@code collection} is {@code null}. |
| */ |
| public boolean removeAll(Collection<?> collection); |
| |
| /** |
| * Removes all objects from this {@code Collection} that are not also found in the |
| * {@code Collection} passed (optional). After this method returns this {@code Collection} |
| * will only contain elements that also can be found in the {@code Collection} |
| * passed to this method. |
| * |
| * @param collection |
| * the collection of objects to retain. |
| * @return {@code true} if this {@code Collection} is modified, {@code false} |
| * otherwise. |
| * @throws UnsupportedOperationException |
| * if removing from this {@code Collection} is not supported. |
| * @throws ClassCastException |
| * if one or more elements of {@code collection} |
| * isn't of the correct type. |
| * @throws NullPointerException |
| * if {@code collection} contains at least one |
| * {@code null} element and this {@code Collection} doesn't support |
| * {@code null} elements. |
| * @throws NullPointerException |
| * if {@code collection} is {@code null}. |
| */ |
| public boolean retainAll(Collection<?> collection); |
| |
| /** |
| * Returns a count of how many objects this {@code Collection} contains. |
| * |
| * @return how many objects this {@code Collection} contains, or Integer.MAX_VALUE |
| * if there are more than Integer.MAX_VALUE elements in this |
| * {@code Collection}. |
| */ |
| public int size(); |
| |
| /** |
| * Returns a new array containing all elements contained in this {@code Collection}. |
| * |
| * If the implementation has ordered elements it will return the element |
| * array in the same order as an iterator would return them. |
| * |
| * The array returned does not reflect any changes of the {@code Collection}. A new |
| * array is created even if the underlying data structure is already an |
| * array. |
| * |
| * @return an array of the elements from this {@code Collection}. |
| */ |
| public Object[] toArray(); |
| |
| /** |
| * Returns an array containing all elements contained in this {@code Collection}. If |
| * the specified array is large enough to hold the elements, the specified |
| * array is used, otherwise an array of the same type is created. If the |
| * specified array is used and is larger than this {@code Collection}, the array |
| * element following the {@code Collection} elements is set to null. |
| * |
| * If the implementation has ordered elements it will return the element |
| * array in the same order as an iterator would return them. |
| * |
| * {@code toArray(new Object[0])} behaves exactly the same way as |
| * {@code toArray()} does. |
| * |
| * @param array |
| * the array. |
| * @return an array of the elements from this {@code Collection}. |
| * |
| * @throws ArrayStoreException |
| * if the type of an element in this {@code Collection} cannot be |
| * stored in the type of the specified array. |
| */ |
| public <T> T[] toArray(T[] array); |
| } |