Java数据结构-collection接口
一,Collection接口结构图
Collection接口详解
collection是一个被高度抽象出来的接口、提供基本的操作数据的行为、属性的定义.
collection api介绍:
public interface Collection<E> extends Iterable<E> {
/**
返回当前collection的逻辑大小
*/
int size();
/**
* 返回collection是否为空 为空返回TRUE, 不为空返回FALSE。
*/
boolean isEmpty();
//如果collection包含元素 o 则返回TRUE,否则返回FALSE。
boolean contains(Object o);
//返回此collection的迭代器iterator。
Iterator<E> iterator();
//返回包含当前collection的所有元素的数组
Object[] toArray();
//返回以T类型的包含所有元素的数组
<T> T[] toArray(T[] a);
//确保此 collection 包含指定的元素 可选操作
boolean add(E e);
//移除指定元素 o
boolean remove(Object o);
//如果当前collection包含指定collection c的所有元素 则返回TRUE。
boolean containsAll(Collection<?> c);
//将指定collection的所有元素添加到当前collection中
boolean addAll(Collection<? extends E> c);
//在当前collection中删除包含指定collection中的所有元素
boolean removeAll(Collection<?> c);
/**Java8新增的方法 新增修饰符default 可以在接口中实现方法
*按照指定过滤器filter规则 移除元素
* @since 1.8
*/
default boolean removeIf(Predicate<? super E> filter) {
Objects.requireNonNull(filter);
boolean removed = false;
final Iterator<E> each = iterator();
while (each.hasNext()) {
if (filter.test(each.next())) {
each.remove();
removed = true;
}
}
return removed;
}
//在此collection种仅保留 指定collection中存在的元素
//换句话说就是 移除此collection中除了C中的所有元素
boolean retainAll(Collection<?> c);
//删除此collection中所有的元素。
void clear();
//将此collection与指定元素进行比较
boolean equals(Object o);
//返回此collection的hash码
int hashCode();
可以说collection是Java数据结构队列形式存储的顶级 接口 ,JDK不提供直接实现,而是下面又细分了set List queue等子接口。
所有实现了collection的(通过子接口set List queue等实现)的类应该提供两个标准的构造函数。
- 一个是无参构造器void
- 一个是有单个类型参数的构造器
二,详细的结构图
三,abstraCollection
abstractCollection 抽象类简介:
AbstractCollection是一个实现Collection接口的抽象类,该类没有其他的额外方法,该类里面有队Collection的简单实现,但是对于子类来说,必须要实现
public abstract int size();
public abstract Iterator<E> iterator();
这两个方法,AbstractCollection抽象类除了上面的两个方法没有实现,其他方法都提供了简单的实现。
另外AbstractCollection的add方法:
public boolean add(E e) {
throw new UnsupportedOperationException();
}
抽象类AbstractCollection中对 add方法的实现 只是抛出异常。不同数据类型的子类应该实现不同的add 方法。
对于AbstractCollection 的总结:
/**
* 此类提供 Collection 接口的骨干实现,以最大限度地减少了实现此接口所需的工作。
*
* 子类要继承此抽象类、
* 1、必须提供两个构造方法、一个无参一个有参。
* 2、必须重写抽象方法 Iterator<E> iterator();方法体中必须有hasNext()和next()两个方法、同时必须实现remove方法 用于操作集合中元素。
* 3、一般要重写add方法、否则子类调用add方法会抛UnsupportedOperationException异常。
* 子类通常要重写此类中的方法已得到更有效的实现、
*/