java.lang.Object java.util.AbstractCollection<E>
public abstract class AbstractCollection<E>
此类提供 Collection 接口的骨干实现,以最大限度地减少了实现此接口所需的工作。
要实现一个不可修改的 collection,编程人员只需扩展此类,并提供 iterator 和 size 方法的实现。(iterator 方法返回的迭代器必须实现 hasNext 和 next。)
要实现可修改的 collection,编程人员必须另外重写此类的 add 方法(否则,会抛出 UnsupportedOperationException),iterator 方法返回的迭代器还必须另外实现其 remove 方法。
按照 Collection 接口规范中的建议,编程人员通常应提供一个 void (无参数)和 Collection 构造方法。
此类中每个非抽象方法的文档详细描述了其实现。如果要实现的 collection 允许更有效的实现,则可以重写这些方法中的每个方法。
此类是 Java Collections Framework 的成员。
Collection
构造方法摘要 | |
---|---|
protected |
AbstractCollection() 唯一的构造方法。 |
方法摘要 | ||
---|---|---|
boolean |
add(E e) 确保此 collection 包含指定的元素(可选操作)。 |
|
boolean |
addAll(Collection<? extends E> c) 将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。 |
|
void |
clear() 移除此 collection 中的所有元素(可选操作)。 |
|
boolean |
contains(Object o) 如果此 collection 包含指定的元素,则返回 true。 |
|
boolean |
containsAll(Collection<?> c) 如果此 collection 包含指定 collection 中的所有元素,则返回 true。 |
|
boolean |
isEmpty() 如果此 collection 不包含元素,则返回 true。 |
|
abstract Iterator<E> |
iterator() 返回在此 collection 中的元素上进行迭代的迭代器。 |
|
boolean |
remove(Object o) 从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。 |
|
boolean |
removeAll(Collection<?> c) 移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。 |
|
boolean |
retainAll(Collection<?> c) 仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。 |
|
abstract int |
size() 返回此 collection 中的元素数。 |
|
Object[] |
toArray() 返回包含此 collection 中所有元素的数组。 |
|
|
toArray(T[] a) 返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。 |
|
String |
toString() 返回此 collection 的字符串表示形式。 |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
从接口 java.util.Collection 继承的方法 |
---|
equals, hashCode |
构造方法详细信息 |
---|
protected AbstractCollection()
方法详细信息 |
---|
public abstract Iterator<E> iterator()
public abstract int size()
Collection
复制的描述
Collection<E>
中的
size
public boolean isEmpty()
此实现返回 size() == 0。
Collection<E>
中的
isEmpty
public boolean contains(Object o)
此实现在 collection 中的元素上进行迭代,并依次检查每个元素以确定其是否与指定的元素相等。
Collection<E>
中的
contains
o
- 测试在此 collection 中是否存在的元素。
ClassCastException
- 如果指定元素的类型与此 collection 不兼容(可选)。
NullPointerException
- 如果指定的元素为 null,并且此 collection 不允许 null 元素(可选)。
public Object[] toArray()
返回的数组将是“安全的”,因为此 collection 并不维护对返回数组的任何引用。(换句话说,即使 collection 受到数组的支持,此方法也必须分配一个新的数组)。因此,调用者可以随意修改返回的数组。
此方法充当了基于数组的 API 与基于 collection 的 API 之间的桥梁。
此实现返回一个数组,它包含此 collection 的迭代器返回的所有元素,这些元素的排列顺序与数组的连续元素存储顺序相同,都是从索引 0
开始。返回数组的长度等于迭代器返回的元素数,即使此 collection 的大小发生更改也是如此,这种情况可能发生在 collection 允许在迭代期间进行并发修改时。size
方法只是作为一个优化提示被调用;即使迭代器返回不同的元素数,也会返回正确的结果。
此方法等效于:
List<E> list = new ArrayList<E>(size());
for (E e : this)
list.add(e);
return list.toArray();
Collection<E>
中的
toArray
public <T> T[] toArray(T[] a)
如果指定的数组能容纳 collection,并有剩余空间(即数组的元素比 collection 的元素多),那么会将数组中紧接 collection 尾部的元素设置为 null。(只有 在调用者知道此 collection 没有包含任何 null 元素时才能用此方法确定 collection 的长度。)
如果此 collection 对其迭代器返回的元素顺序做出了某些保证,那么此方法必须以相同的顺序返回这些元素。
像 Collection.toArray()
方法一样,此方法充当基于数组的 API 与基于 collection 的 API 之间的桥梁。更进一步说,此方法允许对输出数组的运行时类型进行精确控制,并且在某些情况下,可以用来节省分配开销。
假定 x 是只包含字符串的一个已知 collection。以下代码用来将 collection 转储到一个新分配的 String 数组:
String[] y = x.toArray(new String[0]);注意, toArray(new Object[0]) 和 toArray() 在功能上是相同的。
此实现返回一个数组,它包含此 collection 的迭代器返回的所有元素,这些元素的排列顺序与数组的连续元素存储顺序相同,都是从索引 0
开始。如果迭代器返回的元素数太大,不适合指定数组,则在新分配的数组中返回这些元素,该数组的长度等于迭代器返回的元素数,即使此 collection 的大小在进行迭代期间发生更改也是如此,这种情况可能发生在 collection 允许在迭代期间进行并发修改时。size
方法只是作为一个优化提示被调用;即使迭代器返回不同的元素数,也会返回正确的结果。
此方法等效于:
List<E> list = new ArrayList<E>(size());
for (E e : this)
list.add(e);
return list.toArray(a);
Collection<E>
中的
toArray
a
- 存储此 collection 元素的数组(如果其足够大);否则,将为此分配一个具有相同运行时类型的新数组。
ArrayStoreException
- 如果指定数组的运行时类型不是此 collection 每个元素运行时类型的超类型
NullPointerException
- 如果指定的数组为 null
public boolean add(E e)
支持此操作的 collection 可以限制哪些元素能添加到此 collection 中来。需要特别指出的是,一些 collection 拒绝添加 null 元素,其他一些 collection 将对可以添加的元素类型强加限制。Collection 类应该在其文档中清楚地指定能添加哪些元素方面的所有限制。
如果 collection 由于某些原因(已经包含该元素的原因除外)拒绝添加特定的元素,那么它必须 抛出一个异常(而不是返回 false)。这确保了在此调用返回后,collection 总是包含指定的元素。
此实现总是抛出一个 UnsupportedOperationException。
Collection<E>
中的
add
e
- 确定此 collection 中是否存在的元素。
UnsupportedOperationException
- 如果此 collection 不支持
add 操作
ClassCastException
- 如果指定元素的类不允许它添加到此 collection 中
NullPointerException
- 如果指定的元素为 null,并且此 collection 不允许 null 元素
IllegalArgumentException
- 如果元素的某属性不允许它添加到此 collection 中
IllegalStateException
- 如果由于插入限制,元素不能在此时间添加
public boolean remove(Object o)
此实现在该 collection 上进行迭代,查找指定的元素。如果找到该元素,那么它会使用迭代器的 remove 方法从该 collection 中移除该元素。
注意,如果此 collection 的 iterator 方法所返回的迭代器无法实现 remove 方法,并且此 collection 包含指定的对象,那么此实现将抛出 UnsupportedOperationException。
Collection<E>
中的
remove
o
- 要从此 collection 中移除的元素(如果存在)。
UnsupportedOperationException
- 如果此 collection 不支持
remove 操作
ClassCastException
- 如果指定元素的类型与此 collection 不兼容(可选)
NullPointerException
- 如果指定的元素为 null,并且此 collection 不允许 null 元素(可选)。
public boolean containsAll(Collection<?> c)
此实现在指定的 collection 上进行迭代,依次检查该迭代器返回的每个元素,查看其是否包含在此 collection 中。如果是,则返回 true;否则返回 false。
Collection<E>
中的
containsAll
c
- 将检查是否包含在此 collection 中的 collection
ClassCastException
- 如果指定 collection 中有一个或多个元素的类型与此 collection 不兼容(可选)
NullPointerException
- 如果指定 collection 包含一个或多个 null 元素,并且此 collection 不允许 null 元素(可选),或者指定的 collection 为 null
contains(Object)
public boolean addAll(Collection<? extends E> c)
此实现在指定的 collection 上进行迭代,并依次将迭代器返回的每个对象添加到此 collection 中。
注意,除非重写 add,否则此实现将抛出 UnsupportedOperationException(假定指定的 collection 非空)。
Collection<E>
中的
addAll
c
- 包含要添加到此 collection 的元素的 collection
UnsupportedOperationException
- 如果此 collection 不支持
addAll 方法
ClassCastException
- 如果指定 collection 中某个元素的类不允许它添加到此 collection 中
NullPointerException
- 如果指定 collection 包含 null 元素,并且此 collection 不支持 null 元素,或者指定的 collection 为
null
IllegalArgumentException
- 如果指定 collection 的元素的某属性不允许它添加到此 collection 中
IllegalStateException
- 如果由于插入限制,不是所有的元素都能在此时间添加
add(Object)
public boolean removeAll(Collection<?> c)
此实现在此 collection 上进行迭代,依次检查该迭代器返回的每个元素,以查看其是否包含在指定的 collection 中。如果是,则使用迭代器的 remove 方法将其从此 collection 中移除。
注意,如果 iterator 方法返回的迭代器无法实现 remove 方法,并且此 collection 包含一个或多个与指定 collection 共有的元素,那么此实现将抛出 UnsupportedOperationException。
Collection<E>
中的
removeAll
c
- 办好要从此 collection 移除的元素的 collection
UnsupportedOperationException
- 如果此 collection 不支持
removeAll 方法
ClassCastException
- 如果此 collection 中一个或多个元素的类型与指定 collection 不兼容(可选)
NullPointerException
- 如果此 collection 包含一个或多个 null 元素,并且指定的 collection 不支持 null 元素(可选),或者指定的 collection 为 null
remove(Object)
,
contains(Object)
public boolean retainAll(Collection<?> c)
此实现在此 collection 上进行迭代,依次检查该迭代器返回的每个元素,以查看其是否包含在指定的 collection 中。如果不是,则使用迭代器的 remove 方法将其从此 collection 中移除。
注意,如果 iterator 方法返回的迭代器无法实现 remove 方法,并且此 collection 包含一个或多个在指定 collection 中不存在的元素,那么此实现将抛出 UnsupportedOperationException。
Collection<E>
中的
retainAll
c
- 包含保留在此 collection 中的元素的 collection
UnsupportedOperationException
- 如果此 collection 不支持
retainAll 操作
ClassCastException
- 如果此 collection 中一个或多个元素的类型与指定 collection 不兼容(可选)
NullPointerException
- 如果此 collection 包含一个或多个 null 元素,并且指定的 collection 不允许 null 元素(可选),或者指定的 collection 为
null
remove(Object)
,
contains(Object)
public void clear()
此实现在此 collection 上进行迭代,并使用 Iterator.remove 操作移除每个元素。为了提高效率,多数实现可能会选择重写此方法。
注意,如果此 collection 的 iterator 方法所返回的迭代器无法实现 remove 方法,并且此 collection 非空,那么此实现将抛出 UnsupportedOperationException。
Collection<E>
中的
clear
UnsupportedOperationException
- 如果此 collection 不支持
clear 操作
public String toString()
String.valueOf(Object)
可以将元素转换成字符串。