前言
集合是我们在日常开发中经常使用,它位于java.util包,顾名思义,他是java的工具类,帮助我们完成各种操作,他充分利用了java的继承来实现他的功能。以下是我画的一个集合的一个继承关系图,主要牵涉到是ArrayList,LinkedList,HashSet,TreeSet这几个集合类,我在这里也是通过这几个集合类来画他的基础关系,真实情况下,他的继承关系还要复杂的多。
Collection
在这一章中,我主要要说的就是这个接口Collection,他定义了集合必须要有的规范,我们可以通过IDEA的工具查看他定义了什么抽象方法和默认实现
我们可以发现他有四个默认实现,而且这四个默认实现都是从jdk1.8才有的,分别是removeIf(Predicate<? super E> filter),Spliterator spliterator(),Stream stream(),Stream parallelStream()
我们可以发现,后面的三个默认实现方法他主要是为了获取Stream,这个Stream是jdk1.8新加入的,他能帮助我们简化很多代码,提高效率,因为他是以流的方式进行操作的。这里就不多说明了。
而第一个默认实现removeIf,他使用的是迭代器来遍历所有元素,使用Iterator删除每个匹配的元素,如果集合的Iterator不支持删除,就抛出异常UnsupportedOperationException。
int size();
返回集合的大小
boolean isEmpty();
是空集合就返回true,否则为false
boolean contains(Object o);
判断是否包含o这个元素,有就返回true,否则返回false
Iterator iterator();
获取迭代器
Object[] toArray();
将集合转换为一个Object数组
T[] toArray(T[] a);
与上面的类型,只是这个是泛型实现,
boolean add(E e);
添加元素到集合中,成功返回true,否则返回false
boolean remove(Object o);
从集合中删除第一个o元素
boolean containsAll(Collection<?> c);
判断集合是否包含c集合的所有元素,包含返回true,否则false
boolean addAll(Collection<? extends E> c);
将集合c的元素全部添加到本身
boolean removeAll(Collection<?> c);
移除所有集合c中在本身集合包含的元素
boolean retainAll(Collection<?> c);
仅保留此集合中包含在指定集合中的元素
void clear();
清空集合
boolean equals(Object o);
比较
这就是Collection定义的规范,他的子类被要求实现这些功能,才能使用。