public abstract class AbstractCollection<E> extends Object implements Collection<E>
为了实现一个不可修改的集合,程序员只需要扩展这个类并提供iterator和size方法的实现。 ( iterator方法返回的迭代器必须实现hasNext和next )
要实现可修改的集合,程序员必须另外覆盖此类的add方法(否则将抛出UnsupportedOperationException ),并且由iterator方法返回的迭代器必须另外实现其remove方法。
程序员通常应该提供一个空隙(无参数)和Collection构造,按照在Collection接口规范的建议。
该类中每个非抽象方法的文档详细描述了其实现。 如果正在实施的集合承认更有效的实现,则可以覆盖这些方法中的每一种。
Collection
Modifier | Constructor and Description |
---|---|
protected |
AbstractCollection()
唯一的构造函数。
|
Modifier and Type | Method and Description |
---|---|
boolean |
add(E e)
确保此集合包含指定的元素(可选操作)。
|
boolean |
addAll(Collection<? extends E> c)
将指定集合中的所有元素添加到此集合(可选操作)。
|
void |
clear()
从此集合中删除所有元素(可选操作)。
|
boolean |
contains(Object o)
如果此集合包含指定的元素,则返回
true 。
|
boolean |
containsAll(Collection<?> c)
如果此集合包含指定
集合中的所有元素,则返回true。
|
boolean |
isEmpty()
如果此集合不包含元素,则返回
true 。
|
abstract Iterator<E> |
iterator()
返回包含在该集合中的元素的迭代器。
|
boolean |
remove(Object o)
从该集合中删除指定元素的单个实例(如果存在)(可选操作)。
|
boolean |
removeAll(Collection<?> c)
删除指定集合中包含的所有此集合的元素(可选操作)。
|
boolean |
retainAll(Collection<?> c)
仅保留此集合中包含在指定集合中的元素(可选操作)。
|
abstract int |
size()
返回此集合中的元素数。
|
Object[] |
toArray()
返回一个包含此集合中所有元素的数组。
|
<T> T[] |
toArray(T[] a)
返回包含此集合中所有元素的数组;
返回的数组的运行时类型是指定数组的运行时类型。
|
String |
toString()
返回此集合的字符串表示形式。
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
equals, hashCode, parallelStream, removeIf, spliterator, stream
public abstract int size()
Collection
size
在接口
Collection<E>
public boolean isEmpty()
此实现返回size() == 0 。
isEmpty
在接口
Collection<E>
public boolean contains(Object o)
此实现遍历集合中的元素,依次检查每个元素以与指定元素相等。
contains
在接口
Collection<E>
o
- 要在此集合中存在的元素将被测试
ClassCastException
- 如果指定元素的类型与此集合不兼容(
optional )
NullPointerException
- 如果指定的元素为空,并且此集合不允许空元素(
optional )
public Object[] toArray()
返回的数组将是“安全的”,因为该集合不保留对它的引用。 (换句话说,这个方法必须分配一个新的数组,即使这个集合是由数组支持的)。 因此,调用者可以自由地修改返回的数组。
此方法充当基于阵列和基于集合的API之间的桥梁。
此实现返回一个数组,其中包含由该集合的迭代器返回的所有元素,以相同的顺序存储在数组的连续元素中,从索引0
开始。 返回的数组的长度等于迭代器返回的元素数量,即使该迭代器的大小在迭代期间发生变化,如果该迭代允许在迭代期间同时进行修改,则可能会发生这种情况。 size
方法仅被称为优化提示; 即使迭代器返回不同数量的元素,也会返回正确的结果。
此方法相当于:
List<E> list = new ArrayList<E>(size()); for (E e : this) list.add(e); return list.toArray();
toArray
在接口
Collection<E>
public <T> T[] toArray(T[] a)
如果这个集合适合指定的数组,有空余的空间(即,该数组具有比该集合更多的元素),则集合结束后立即数组中的元素设置为null 。 ( 仅当调用者知道此集合不包含任何null元素时,这仅用于确定此集合的长度。)
如果此集合对其迭代器返回的元素的顺序做出任何保证,则此方法必须以相同的顺序返回元素。
像Collection.toArray()
方法一样,此方法充当基于阵列和基于集合的API之间的桥梁。 此外,该方法允许精确地控制输出阵列的运行时类型,并且在某些情况下可以用于节省分配成本。
假设x是一个已知只包含字符串的集合。 下面的代码可用于收集转储到的String一个新分配的数组:
String[] y = x.toArray(new String[0]);
请注意, toArray(new Object[0])的功能与toArray()相同 。
此实现返回一个数组,该数组包含该集合的迭代器返回的所有元素,以相同的顺序存储,以索引0
开头存储在数组的连续元素中。 如果迭代器返回的元素数量太大而不能适应指定的数组,则元素将返回一个新分配的数组,其长度等于迭代器返回的元素数量,即使此集合的大小更改在迭代期间,如果集合允许在迭代期间同时进行修改,则可能会发生这种情况。 size
方法只被称为优化提示; 即使迭代器返回不同数量的元素,也会返回正确的结果。
此方法相当于:
List<E> list = new ArrayList<E>(size()); for (E e : this) list.add(e); return list.toArray(a);
toArray
中的
Collection<E>
T
- 包含集合的数组的运行时类型
a
- 要存储此集合的元素的数组,如果它足够大;
否则,为此目的分配相同运行时类型的新数组。
ArrayStoreException
- 如果指定数组的运行时类型不是此集合中每个元素的运行时类型的超类型
NullPointerException
- 如果指定的数组为空
public boolean add(E e)
支持此操作的集合可能会限制可能添加到此集合的元素。 特别是一些集合将拒绝添加null元素,其他集合将对可能添加的元素的类型施加限制。 收集类应在其文档中明确说明可能添加哪些元素的限制。
如果一个集合拒绝添加一个特定的元素,除了它已经包含该元素之外,它必须引发异常(而不是返回false )。 这保留了一个集合在此调用返回后始终包含指定元素的不变量。
这个实现总是抛出一个UnsupportedOperationException 。
add
在接口
Collection<E>
e
- 要确保在此集合中的存在的元素
UnsupportedOperationException
- 如果此
集合不支持add操作
ClassCastException
- 如果指定元素的类阻止将其添加到此集合
NullPointerException
- 如果指定的元素为空,并且该集合不允许空元素
IllegalArgumentException
- 如果元素的某些属性阻止它添加到此集合
IllegalStateException
- 如果由于插入限制,此时无法添加该元素
public boolean remove(Object o)
该实现遍历集合,寻找指定的元素。 如果找到该元素,它将使用迭代器的remove方法从集合中删除该元素。
注意,此实现抛出UnsupportedOperationException如果迭代此collection的iterator方法返回没有实现remove方法,并且此collection包含指定的对象。
remove
在界面
Collection<E>
o
- 要从此集合中删除的元素(如果存在)
UnsupportedOperationException
- 如果此
集合不支持remove操作
ClassCastException
- 如果指定元素的类型与此集合不兼容(
optional )
NullPointerException
- 如果指定的元素为空,并且此集合不允许空元素(
optional )
public boolean containsAll(Collection<?> c)
这个实现遍历指定的集合,依次检查迭代器返回的每个元素,以查看它是否包含在该集合中。 如果所有元素如此包含true被退回,否则false 。
containsAll
在接口
Collection<E>
c
- 要在此集合中检查遏制的集合
ClassCastException
- 如果指定集合中的一个或多个元素的类型与此集合不兼容(
optional )
NullPointerException
- 如果指定的集合包含一个或多个空元素,并且此集合不允许空元素(
optional ),或者指定的集合为空。
contains(Object)
public boolean addAll(Collection<? extends E> c)
这个实现遍历指定的集合,并依次将迭代器返回的每个对象添加到该集合中。
请注意,除非add被覆盖(假定指定的集合不为空),否则此实现将抛出UnsupportedOperationException 。
addAll
在接口
Collection<E>
c
- 包含要添加到此集合的元素的集合
UnsupportedOperationException
- 如果此
集合不支持addAll操作
ClassCastException
- 如果指定集合的元素的类阻止将其添加到此集合
NullPointerException
- 如果指定的集合包含一个空元素,并且此集合不允许空元素,或者如果指定的集合为空
IllegalArgumentException
- 如果指定集合的元素的某些属性阻止将其添加到此集合
IllegalStateException
- 如果不是所有的元素可以由于插入限制在这个时候被添加
add(Object)
public boolean removeAll(Collection<?> c)
这个实现遍历这个集合,依次检查迭代器返回的每个元素,看看它是否包含在指定的集合中。 如果它是如此包含,它将使用迭代器的remove方法从该集合中删除。
注意,此实现将抛出UnsupportedOperationException如果迭代由iterator方法返回没有实现remove方法,并且此集合包含一个或多个共同的元素与指定的集合。
removeAll
在界面
Collection<E>
c
- 包含要从此集合中删除的元素的集合
UnsupportedOperationException
- 如果此
集合不支持
removeAll方法
ClassCastException
- 如果此集合中的一个或多个元素的类型与指定的集合不兼容(
optional )
NullPointerException
- 如果此集合包含一个或多个空元素,并且指定的集合不支持空元素(
optional ),或者如果指定的集合为空
remove(Object)
,
contains(Object)
public boolean retainAll(Collection<?> c)
这个实现遍历这个集合,依次检查迭代器返回的每个元素,看看它是否包含在指定的集合中。 如果没有这样包含,它将使用迭代器的remove方法从该集合中删除。
注意,此实现将抛出UnsupportedOperationException如果迭代由iterator方法返回没有实现remove方法,并且此collection包含指定集合中不存在一个或多个元素。
retainAll
在接口
Collection<E>
c
- 包含要保留在此集合中的元素的集合
UnsupportedOperationException
- 如果此
集合不支持retainAll操作
ClassCastException
- 如果此集合中的一个或多个元素的类型与指定的集合不兼容(
optional )
NullPointerException
- 如果此集合包含一个或多个空元素,并且指定的集合不允许空元素(
optional ),或者如果指定的集合为空
remove(Object)
,
contains(Object)
public void clear()
此实现遍历此集合,使用Iterator.remove操作删除每个元素。 大多数实现可能会选择覆盖此方法的效率。
请注意,如果此集合的iterator方法返回的迭代器不实现remove方法,并且此集合不为空,则此实现将抛出UnsupportedOperationException 。
clear
在接口
Collection<E>
UnsupportedOperationException
- 如果此
集合不支持clear操作
public String toString()
String.valueOf(Object)
。