java.util.Collection是个接口,很容易和工具类java.util.Collections弄混淆。今天我就抽丝剥茧来研究一下这个接口。
这里我基于JDK1.7.0_80的Collections接口进行研究,以避免JDK1.8引入的StreamAPI和函数式编程接口。
一、接口定义:
public interface Collection<E> extends Iterable<E> {
Collection是继承自Iterable接口的,并且是V值集合结构,非K-V值集合。关于Iterable接口,我另有文章介绍。这里先不做说明:
值得注意的是,这个接口是JDK1.2版本才开始出现的。
二、接口里规定的方法:
1、集合大小
int size();
2、判断集合是否为空:
boolean isEmpty();
其实这个方法,在日常使用中经常被第一个方法size()掩盖住了光芒。我见过很多人都是调用size() == 0来进行判断。
3、迭代器模式的体现,当然这个也是继承自Iterable而来的。
Iterator<E> iterator();
注意Iterable接口是在java.lang包下面的。
4、适配器模式的体现:
Object[] toArray();
<T> T[] toArray(T[] a);
5、增删查大家族:(没有改)
(1)增:
//增加一个
boolean add(E e);
//增加多个
boolean addAll(Collection<? extends E> c);
(2)删:
//删一个
boolean remove(Object o);
//删多个
boolean removeAll(Collection<?> c);
//全删掉
void clear();
(3)查:
//查一个
boolean contains(Object o);
//查多个,要求都在
boolean containsAll(Collection<?> c);
6、集合比较:
boolean equals(Object o);
7、hash值计算:
int hashCode();