AbstractCollection.java revision f6c387128427e121477c1b32ad35cdcaa5101ba3
1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * this work for additional information regarding copyright ownership. 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (the "License"); you may not use this file except in compliance with 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the License. You may obtain a copy of the License at 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License. 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage java.util; 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.lang.reflect.Array; 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/** 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Class {@code AbstractCollection} is an abstract implementation of the {@code 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Collection} interface. A subclass must implement the abstract methods {@code 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * iterator()} and {@code size()} to create an immutable collection. To create a 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * modifiable collection it's necessary to override the {@code add()} method that 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * currently throws an {@code UnsupportedOperationException}. 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @since Android 1.0 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic abstract class AbstractCollection<E> implements Collection<E> { 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Constructs a new instance of this {@code AbstractCollection}. 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @since Android 1.0 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected AbstractCollection() { 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super(); 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see Collection#add 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean add(E object) { 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new UnsupportedOperationException(); 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Attempts to add all of the objects contained in {@code collection} 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to the contents of this {@code Collection} (optional). This implementation 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * iterates over the given {@code Collection} and calls {@code add} for each 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * element. If any of these calls return {@code true}, then {@code true} is 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * returned as result of this method call, {@code false} otherwise. If this 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code Collection} does not support adding elements, an {@code 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * UnsupportedOperationException} is thrown. 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p> 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If the passed {@code Collection} is changed during the process of adding elements 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to this {@code Collection}, the behavior depends on the behavior of the passed 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code Collection}. 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param collection 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the collection of objects. 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return {@code true} if this {@code Collection} is modified, {@code false} 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * otherwise. 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception UnsupportedOperationException 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * when adding to this {@code Collection} is not supported. 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception ClassCastException 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * when the class of an object is inappropriate for this 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code Collection}. 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception IllegalArgumentException 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * when an object cannot be added to this {@code Collection}. 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception NullPointerException 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * when {@code collection} is {@code null}, or if it contains 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code null} elements and this {@code Collection} does not support 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * such elements. 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @since Android 1.0 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean addAll(Collection<? extends E> collection) { 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project boolean result = false; 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Iterator<? extends E> it = collection.iterator(); 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (it.hasNext()) { 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (add(it.next())) { 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project result = true; 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return result; 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Removes all elements from this {@code Collection}, leaving it empty (optional). 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This implementation iterates over this {@code Collection} and calls the {@code 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * remove} method on each element. If the iterator does not support removal 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * of elements, an {@code UnsupportedOperationException} is thrown. 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p> 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Concrete implementations usually can clear a {@code Collection} more efficiently 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and should therefore overwrite this method. 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception UnsupportedOperationException 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * when the iterator does not support removing elements from 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * this {@code Collection} 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see #iterator 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see #isEmpty 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see #size 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @since Android 1.0 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void clear() { 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Iterator<E> it = iterator(); 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (it.hasNext()) { 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project it.next(); 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project it.remove(); 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Tests whether this {@code Collection} contains the specified object. This 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * implementation iterates over this {@code Collection} and tests, whether any 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * element is equal to the given object. If {@code object != null} then 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code object.equals(e)} is called for each element {@code e} returned by 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the iterator until the element is found. If {@code object == null} then 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * each element {@code e} returned by the iterator is compared with the test 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code e == null}. 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param object 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the object to search for. 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return {@code true} if object is an element of this {@code Collection}, {@code 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * false} otherwise. 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception ClassCastException 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the object to look for isn't of the correct type. 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception NullPointerException 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the object to look for is {@code null} and this 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code Collection} doesn't support {@code null} elements. 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @since Android 1.0 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean contains(Object object) { 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Iterator<E> it = iterator(); 138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (object != null) { 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (it.hasNext()) { 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (object.equals(it.next())) { 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return true; 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (it.hasNext()) { 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (it.next() == null) { 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return true; 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return false; 152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Tests whether this {@code Collection} contains all objects contained in the 156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specified {@code Collection}. This implementation iterates over the specified 157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code Collection}. If one element returned by the iterator is not contained in 158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * this {@code Collection}, then {@code false} is returned; {@code true} otherwise. 159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param collection 161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the collection of objects. 162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return {@code true} if all objects in the specified {@code Collection} are 163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * elements of this {@code Collection}, {@code false} otherwise. 164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception ClassCastException 165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if one or more elements of {@code collection} isn't of the 166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * correct type. 167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception NullPointerException 168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if {@code collection} contains at least one {@code null} 169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * element and this {@code Collection} doesn't support {@code null} 170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * elements. 171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception NullPointerException 172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if {@code collection} is {@code null}. 173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @since Android 1.0 174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean containsAll(Collection<?> collection) { 176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Iterator<?> it = collection.iterator(); 177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (it.hasNext()) { 178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (!contains(it.next())) { 179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return false; 180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return true; 183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns if this {@code Collection} contains no elements. This implementation 187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * tests, whether {@code size} returns 0. 188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return {@code true} if this {@code Collection} has no elements, {@code false} 190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * otherwise. 191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see #size 193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @since Android 1.0 194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean isEmpty() { 196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return size() == 0; 197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns an instance of {@link Iterator} that may be used to access the 201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * objects contained by this {@code Collection}. The order in which the elements are 202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * returned by the {@link Iterator} is not defined unless the instance of the 203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code Collection} has a defined order. In that case, the elements are returned in that order. 204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p> 205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * In this class this method is declared abstract and has to be implemented 206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * by concrete {@code Collection} implementations. 207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return an iterator for accessing the {@code Collection} contents. 209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @since Android 1.0 210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public abstract Iterator<E> iterator(); 212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Removes one instance of the specified object from this {@code Collection} if one 215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * is contained (optional). This implementation iterates over this 216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code Collection} and tests for each element {@code e} returned by the iterator, 217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * whether {@code e} is equal to the given object. If {@code object != null} 218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * then this test is performed using {@code object.equals(e)}, otherwise 219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * using {@code object == null}. If an element equal to the given object is 220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * found, then the {@code remove} method is called on the iterator and 221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code true} is returned, {@code false} otherwise. If the iterator does 222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * not support removing elements, an {@code UnsupportedOperationException} 223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * is thrown. 224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param object 226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the object to remove. 227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return {@code true} if this {@code Collection} is modified, {@code false} 228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * otherwise. 229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception UnsupportedOperationException 230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * when removing from this {@code Collection} is not supported. 231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception ClassCastException 232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * when the object passed is not of the correct type. 233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception NullPointerException 234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if {@code object} is {@code null} and this {@code Collection} 235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * doesn't support {@code null} elements. 236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @since Android 1.0 237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean remove(Object object) { 239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Iterator<?> it = iterator(); 240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (object != null) { 241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (it.hasNext()) { 242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (object.equals(it.next())) { 243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project it.remove(); 244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return true; 245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (it.hasNext()) { 249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (it.next() == null) { 250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project it.remove(); 251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return true; 252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return false; 256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Removes all occurrences in this {@code Collection} of each object in the 260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specified {@code Collection} (optional). After this method returns none of the 261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * elements in the passed {@code Collection} can be found in this {@code Collection} 262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * anymore. 263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p> 264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This implementation iterates over this {@code Collection} and tests for each 265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * element {@code e} returned by the iterator, whether it is contained in 266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the specified {@code Collection}. If this test is positive, then the {@code 267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * remove} method is called on the iterator. If the iterator does not 268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * support removing elements, an {@code UnsupportedOperationException} is 269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * thrown. 270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param collection 272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the collection of objects to remove. 273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return {@code true} if this {@code Collection} is modified, {@code false} 274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * otherwise. 275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception UnsupportedOperationException 276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * when removing from this {@code Collection} is not supported. 277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception ClassCastException 278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if one or more elements of {@code collection} isn't of the 279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * correct type. 280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception NullPointerException 281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if {@code collection} contains at least one {@code null} 282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * element and this {@code Collection} doesn't support {@code null} 283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * elements. 284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception NullPointerException 285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if {@code collection} is {@code null}. 286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @since Android 1.0 287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean removeAll(Collection<?> collection) { 289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project boolean result = false; 290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Iterator<?> it = iterator(); 291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (it.hasNext()) { 292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (collection.contains(it.next())) { 293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project it.remove(); 294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project result = true; 295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return result; 298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Removes all objects from this {@code Collection} that are not also found in the 302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code Collection} passed (optional). After this method returns this {@code Collection} 303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * will only contain elements that also can be found in the {@code Collection} 304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * passed to this method. 305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p> 306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This implementation iterates over this {@code Collection} and tests for each 307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * element {@code e} returned by the iterator, whether it is contained in 308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the specified {@code Collection}. If this test is negative, then the {@code 309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * remove} method is called on the iterator. If the iterator does not 310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * support removing elements, an {@code UnsupportedOperationException} is 311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * thrown. 312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param collection 314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the collection of objects to retain. 315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return {@code true} if this {@code Collection} is modified, {@code false} 316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * otherwise. 317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception UnsupportedOperationException 318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * when removing from this {@code Collection} is not supported. 319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception ClassCastException 320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if one or more elements of {@code collection} 321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * isn't of the correct type. 322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception NullPointerException 323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if {@code collection} contains at least one 324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code null} element and this {@code Collection} doesn't support 325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code null} elements. 326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception NullPointerException 327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if {@code collection} is {@code null}. 328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @since Android 1.0 329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean retainAll(Collection<?> collection) { 331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project boolean result = false; 332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Iterator<?> it = iterator(); 333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (it.hasNext()) { 334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (!collection.contains(it.next())) { 335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project it.remove(); 336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project result = true; 337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return result; 340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns a count of how many objects this {@code Collection} contains. 344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p> 345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * In this class this method is declared abstract and has to be implemented 346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * by concrete {@code Collection} implementations. 347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return how many objects this {@code Collection} contains, or {@code Integer.MAX_VALUE} 349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if there are more than {@code Integer.MAX_VALUE} elements in this 350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code Collection}. 351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @since Android 1.0 352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public abstract int size(); 354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Object[] toArray() { 356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int size = size(), index = 0; 357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Iterator<?> it = iterator(); 358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object[] array = new Object[size]; 359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (index < size) { 360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project array[index++] = it.next(); 361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return array; 363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @SuppressWarnings("unchecked") 366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public <T> T[] toArray(T[] contents) { 367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int size = size(), index = 0; 368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (size > contents.length) { 369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Class<?> ct = contents.getClass().getComponentType(); 370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project contents = (T[])Array.newInstance(ct, size); 371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (E entry: this) { 373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project contents[index++] = (T)entry; 374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (index < contents.length) { 376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project contents[index] = null; 377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return contents; 379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns the string representation of this {@code Collection}. The presentation 383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * has a specific format. It is enclosed by square brackets ("[]"). Elements 384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * are separated by ', ' (comma and space). 385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the string representation of this {@code Collection}. 387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @since Android 1.0 388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String toString() { 391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (isEmpty()) { 392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return "[]"; //$NON-NLS-1$ 393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project StringBuilder buffer = new StringBuilder(size() * 16); 396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buffer.append('['); 397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Iterator<?> it = iterator(); 398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (it.hasNext()) { 399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object next = it.next(); 400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (next != this) { 401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buffer.append(next); 402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buffer.append("(this Collection)"); //$NON-NLS-1$ 404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if(it.hasNext()) { 406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buffer.append(", "); //$NON-NLS-1$ 407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buffer.append(']'); 410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return buffer.toString(); 411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 413