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