public abstract class AbstractCollection
extends Object
implements Collection<E>
java.lang.Object | |
↳ | java.util.AbstractCollection<E> |
Known Direct Subclasses
|
Known Indirect Subclasses
AbstractSequentialList<E>,
ArrayBlockingQueue<E>,
ArrayList<E>,
ConcurrentLinkedQueue<E>,
ConcurrentSkipListSet<E>,
CopyOnWriteArraySet<E>,
DelayQueue<E extends
Delayed>,
EnumSet<E extends
Enum<E>>,
HashSet<E>,
LinkedBlockingDeque<E>,
LinkedBlockingQueue<E>,
LinkedHashSet<E>,
LinkedList<E>,
LinkedTransferQueue<E>, and
6 others.
|
该类提供了 Collection接口的骨架实现,以最大限度地减少实现此接口所需的工作量。
为了实现一个不可修改的集合,程序员只需要扩展这个类并提供iterator和size方法的实现。 (由iterator方法返回的迭代器必须实现hasNext和next。 )
为了实现可修改的集合,程序员必须另外重写此类的 add方法(否则将引发 UnsupportedOperationException ),并且由 iterator方法返回的迭代器必须另外实现其方法 remove 。
程序员通常应该提供一个空隙(无参数)和 Collection构造,按照在 Collection接口规范的建议。
这个类中每个非抽象方法的文档都详细描述了它的实现。 如果正在实施的集合允许更有效的实现,则可以重写这些方法中的每一个。
本课是 Java Collections Framework的成员。
也可以看看:
Protected constructors |
|
---|---|
AbstractCollection() 唯一的构造函数。 |
Public methods |
|
---|---|
boolean |
add(E e) 确保此集合包含指定的元素(可选操作)。 这个实现总是抛出一个 UnsupportedOperationException 。 |
boolean |
addAll(Collection<? extends E> c) 将指定集合中的所有元素添加到此集合(可选操作)。 该实现迭代指定的集合,并将迭代器返回的每个对象依次添加到该集合中。 |
void |
clear() 从该集合中删除所有元素(可选操作)。 此实现迭代该集合,使用 Iterator.remove操作删除每个元素。 |
boolean |
contains(Object o) 如果此集合包含指定的元素,则返回 true 。 该实现迭代集合中的元素,依次检查每个元素是否与指定元素相等。 |
boolean |
containsAll(Collection<?> c) 如果此集合包含指定集合中的所有元素,则返回 true 。 此实现迭代指定的集合,依次检查迭代器返回的每个元素,以查看它是否包含在此集合中。 |
boolean |
isEmpty() 如果此集合不包含元素,则返回 true 。 该实现返回 size() == 0 。 |
abstract Iterator<E> |
iterator() 返回此集合中包含的元素的迭代器。 |
boolean |
remove(Object o) 从该集合中移除指定元素的单个实例(如果存在)(可选操作)。 该实现迭代查找指定元素的集合。 |
boolean |
removeAll(Collection<?> c) 删除指定集合中包含的所有此集合的元素(可选操作)。 该实现迭代该集合,依次检查迭代器返回的每个元素,以查看它是否包含在指定集合中。 |
boolean |
retainAll(Collection<?> c) 仅保留包含在指定集合中的此集合中的元素(可选操作)。 该实现迭代该集合,依次检查迭代器返回的每个元素,以查看它是否包含在指定集合中。 |
abstract int |
size() 返回此集合中的元素数量。 |
<T> T[] |
toArray(T[] a) 返回包含此集合中所有元素的数组; 返回数组的运行时类型是指定数组的运行时类型。 该实现返回一个数组,其中包含由该集合的迭代器以相同顺序返回的所有元素,并存储在数组的连续元素中,从索引 |
Object[] |
toArray() 返回包含此集合中所有元素的数组。 该实现返回一个数组,其中包含由该集合的迭代器返回的所有元素,该数组按照相同顺序存储在数组的连续元素中,从索引 |
String |
toString() 返回此集合的字符串表示形式。 |
Inherited methods |
|
---|---|
From class java.lang.Object
|
|
From interface java.util.Collection
|
|
From interface java.lang.Iterable
|
boolean add (E e)
确保此集合包含指定的元素(可选操作)。 如果此集合因呼叫而改变,则返回true 。 (如果此集合不允许重复且已包含指定元素,则返回false。 )
支持此操作的集合可能会限制可将哪些元素添加到此集合中。 特别是,某些集合将拒绝添加null元素,而其他集合将对可能添加的元素的类型施加限制。 集合类应在其文档中明确指定可添加哪些元素的任何限制。
如果一个集合因为除了它已经包含元素之外的任何其他原因而拒绝添加一个特定的元素,它必须抛出一个异常(而不是返回false )。 这保留了该调用返回后集合始终包含指定元素的不变量。
这个实现总是抛出一个 UnsupportedOperationException 。
Parameters | |
---|---|
e |
E : element whose presence in this collection is to be ensured |
Returns | |
---|---|
boolean |
true if this collection changed as a result of the call |
Throws | |
---|---|
UnsupportedOperationException |
|
ClassCastException |
|
NullPointerException |
|
IllegalArgumentException |
|
IllegalStateException |
boolean addAll (Collection<? extends E> c)
将指定集合中的所有元素添加到此集合(可选操作)。 如果在操作过程中修改了指定的集合,则此操作的行为未定义。 (这意味着如果指定的集合是此集合,并且此集合不是空的,则此调用的行为是未定义的。)
该实现迭代指定的集合,并将迭代器返回的每个对象依次添加到该集合中。
请注意,除非 add被覆盖(假设指定的集合非空),否则此实现将抛出 UnsupportedOperationException 。
Parameters | |
---|---|
c |
Collection : collection containing elements to be added to this collection |
Returns | |
---|---|
boolean |
true if this collection changed as a result of the call |
Throws | |
---|---|
UnsupportedOperationException |
|
ClassCastException |
|
NullPointerException |
|
IllegalArgumentException |
|
IllegalStateException |
也可以看看:
void clear ()
从该集合中删除所有元素(可选操作)。 此方法返回后,集合将为空。
该实现迭代该集合,使用Iterator.remove操作删除每个元素。 大多数实现可能会选择重写此方法以提高效率。
请注意,如果此集合的 iterator方法返回的迭代器未实现 remove方法并且此集合非空,则此实现将抛出 UnsupportedOperationException 。
Throws | |
---|---|
UnsupportedOperationException |
boolean contains (Object o)
如果此集合包含指定的元素,则返回true 。 更正式地说,返回true当且仅当该集合包含至少一个元素e,例如(o==null ? e==null : o.equals(e)) 。
该实现迭代集合中的元素,依次检查每个元素是否与指定元素相等。
Parameters | |
---|---|
o |
Object : element whose presence in this collection is to be tested |
Returns | |
---|---|
boolean |
true if this collection contains the specified element |
Throws | |
---|---|
ClassCastException |
|
NullPointerException |
boolean containsAll (Collection<?> c)
如果此集合包含指定集合中的所有元素,则返回 true 。
此实现迭代指定的集合,依次检查迭代器返回的每个元素,以查看它是否包含在此集合中。 如果所有元素都这样包含true返回,否则false。
Parameters | |
---|---|
c |
Collection : collection to be checked for containment in this collection |
Returns | |
---|---|
boolean |
true if this collection contains all of the elements in the specified collection |
Throws | |
---|---|
ClassCastException |
|
NullPointerException |
也可以看看:
boolean isEmpty ()
如果此集合不包含元素,则返回 true 。
该实现返回 size() == 0 。
Returns | |
---|---|
boolean |
true if this collection contains no elements |
Iterator<E> iterator ()
返回此集合中包含的元素的迭代器。
Returns | |
---|---|
Iterator<E> |
an iterator over the elements contained in this collection |
boolean remove (Object o)
从该集合中移除指定元素的单个实例(如果存在)(可选操作)。 更正式地说,如果该集合包含一个或多个这样的元素,则删除元素e ,使得(o==null ? e==null : o.equals(e)) 。 如果此集合包含指定的元素(或等效于此集合因该调用而更改),则返回true 。
该实现迭代查找指定元素的集合。 如果它找到元素,它使用迭代器的remove方法从集合中移除元素。
请注意,如果此集合的迭代器方法返回的迭代器未实现 remove方法,并且此集合包含指定的对象,则此实现将引发 UnsupportedOperationException 。
Parameters | |
---|---|
o |
Object : element to be removed from this collection, if present |
Returns | |
---|---|
boolean |
true if an element was removed as a result of this call |
Throws | |
---|---|
UnsupportedOperationException |
|
ClassCastException |
|
NullPointerException |
boolean removeAll (Collection<?> c)
删除指定集合中包含的所有此集合的元素(可选操作)。 此调用返回后,此集合将不包含与指定集合相同的元素。
该实现迭代该集合,依次检查迭代器返回的每个元素,以查看它是否包含在指定集合中。 如果包含它,则使用迭代器的remove方法将其从此集合中删除。
请注意,如果由 iterator方法返回的迭代器未实现 remove方法,并且此集合包含一个或多个与指定集合相同的元素,则此实现将抛出 UnsupportedOperationException 。
Parameters | |
---|---|
c |
Collection : collection containing elements to be removed from this collection |
Returns | |
---|---|
boolean |
true if this collection changed as a result of the call |
Throws | |
---|---|
UnsupportedOperationException |
|
ClassCastException |
|
NullPointerException |
也可以看看:
boolean retainAll (Collection<?> c)
仅保留包含在指定集合中的此集合中的元素(可选操作)。 换句话说,从该集合中删除所有未包含在指定集合中的元素。
该实现迭代该集合,依次检查迭代器返回的每个元素,以查看它是否包含在指定集合中。 如果它没有被包含,使用迭代器的remove方法将其从此集合中删除。
请注意,如果由 iterator方法返回的迭代器未实现 remove方法,并且此集合包含指定集合中不存在的一个或多个元素,则此实现将抛出 UnsupportedOperationException 。
Parameters | |
---|---|
c |
Collection : collection containing elements to be retained in this collection |
Returns | |
---|---|
boolean |
true if this collection changed as a result of the call |
Throws | |
---|---|
UnsupportedOperationException |
|
ClassCastException |
|
NullPointerException |
也可以看看:
int size ()
返回此集合中的元素数量。 如果此集合包含多个Integer.MAX_VALUE元素,则返回Integer.MAX_VALUE 。
Returns | |
---|---|
int |
the number of elements in this collection |
T[] toArray (T[] a)
返回包含此集合中所有元素的数组; 返回数组的运行时类型是指定数组的运行时类型。 如果集合适合指定的数组,则将其返回。 否则,将使用指定数组的运行时类型和此集合的大小分配一个新数组。
如果此集合适合指定的数组并有空余空间(即数组的元素多于此集合),则紧随集合结束后的数组中的元素将设置为null 。 ( 只有当调用者知道这个集合不包含任何null元素时,这对确定此集合的长度非常有用。)
如果此集合对其迭代器返回的元素的顺序做出任何保证,则此方法必须以相同顺序返回元素。
与toArray()
方法一样,此方法充当基于数组和基于集合的API之间的桥梁。 此外,该方法允许精确控制输出数组的运行时类型,并且在某些情况下可以用于节省分配成本。
假设x是一个已知只包含字符串的集合。 以下代码可用于将集合转储到新分配的String数组中:
String[] y = x.toArray(new String[0]);Note that toArray(new Object[0]) is identical in function to toArray().
该实现返回一个数组,其中包含由该集合的迭代器以相同顺序返回的所有元素,并存储在数组的连续元素中,从索引0
开始。 如果迭代器返回的元素数量太大而不能放入指定数组中,那么元素将返回一个长度等于迭代器返回的元素数量的新分配数组中,即使该集合的大小发生变化在迭代期间,如果集合允许在迭代期间进行并发修改,可能会发生这种情况。 size
方法仅作为优化提示调用; 即使迭代器返回不同数量的元素,也会返回正确的结果。
这种方法相当于:
List<E> list = new ArrayList<E>(size());
for (E e : this)
list.add(e);
return list.toArray(a);
Parameters | |
---|---|
a |
T : the array into which the elements of this collection are to be stored, if it is big enough; otherwise, a new array of the same runtime type is allocated for this purpose. |
Returns | |
---|---|
T[] |
an array containing all of the elements in this collection |
Throws | |
---|---|
ArrayStoreException |
|
NullPointerException |
Object[] toArray ()
返回包含此集合中所有元素的数组。 如果此集合对其迭代器返回的元素的顺序做出任何保证,则此方法必须以相同顺序返回元素。
返回的数组将是“安全的”,因为这个集合没有维护它的引用。 (换句话说,即使该集合由数组支持,该方法也必须分配一个新数组)。 调用者可以自由修改返回的数组。
此方法充当基于数组和基于集合的API之间的桥梁。
该实现以索引0
开始,以相同的顺序返回一个数组,其中包含由该集合的迭代器返回的所有元素的数组,这些元素存储在数组的连续元素中。 即使迭代过程中该集合的大小发生变化,返回数组的长度等于迭代器返回的元素数量,如果集合允许在迭代过程中同时进行修改,则可能会发生这种情况。 size
方法仅作为优化提示被调用; 即使迭代器返回不同数量的元素,也会返回正确的结果。
这种方法相当于:
List<E> list = new ArrayList<E>(size());
for (E e : this)
list.add(e);
return list.toArray();
Returns | |
---|---|
Object[] |
an array containing all of the elements in this collection |
String toString ()
返回此集合的字符串表示形式。 字符串表示由集合元素的列表组成,它们按其迭代器返回的顺序包含在方括号中( "[]" )。 相邻元素由字符", " (逗号和空格)分隔。 元素通过valueOf(Object)
转换为字符串。
Returns | |
---|---|
String |
a string representation of this collection |