(基于JDK1.8源码分析)
一,Collection
所有实现Collection接口的类原则上应该提供两种构造函数:
【1】无参构造-创建一个空的容器
【2】有参构造-创建一个新的Collection,这个新的Collection和传入的Collection具有相同的元素
二,源码分析
public interface Collection<E> extends Iterable<E> { /** 集合大小 */ int size(); /** 是否为空 */ boolean isEmpty(); /** 是否包含指定元素 */ boolean contains(Object o); /** 返回用于遍历集合的迭代器*/ Iterator<E> iterator(); /** 将集合转为数组*/ Object[] toArray(); /** 将集合转为指定类型数组*/ <T> T[] toArray(T[] a); /** 新增元素 */ boolean add(E e); /** 删除元素*/ boolean remove(Object o); /** 集合中是否包含C集合中的元素*/ boolean containsAll(Collection<?> c); /** 新增集合元素*/ boolean addAll(Collection<? extends E> c); /** 集合中删除C集合中有的元素*/ boolean removeAll(Collection<?> c); /***/ 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; } /** 集合中只保留C集合中的元素*/ boolean retainAll(Collection<?> c); /** 清空集合元素*/ void clear(); /** 比较集合元素是否相同*/ boolean equals(Object o); /** 计算哈希码*/ int hashCode(); /***/ @Override default Spliterator<E> spliterator() { return Spliterators.spliterator(this, 0); } /***/ default Stream<E> stream() { return StreamSupport.stream(spliterator(), false); } /***/ default Stream<E> parallelStream() { return StreamSupport.stream(spliterator(), true); } }