Collection 框架是用于表示”容器”的对象, 最高层次的抽象是Collection
接口.
分类
- 可变容器: 初始化之后可以修改, 如
add(), remove()
- 不可变容器: 初始化之后只可以查询, 如
size(), contains()
AbstractCollection
一般来说, 我们只需要有接口并且实现就可以了, 但是集合框架给我们提供了一个抽象骨架来减少实现时的重复代码. 比如: isEmpty()
通常依赖于 size()
, 那么就可以把isEmpty()
的实现放在抽象集合中, 减少了代码的重复, 这里使用了模版方法设计模式.
空指针
集合中可以存放任意对象, 包括空指针, 那么在进行遍历时需要特别处理, 下面就是Java源码中的实现:
public boolean remove(Object o) {
Iterator<E> it = iterator();
// 代码逻辑完全相同, 只是为了处理空指针
if (o==null) {
while (it.hasNext()) {
if (it.next()==null) {
it.remove();
return true;
}
}
} else {
while (it.hasNext()) {
if (o.equals(it.next())) {
it.remove();
return true;
}
}
}
return false;
}
Iterator
集合操作在很大程度上依赖于迭代, 所以集合扩展了iterable
接口.