Collection<E>接口extends Iteratable<E>接口。数组
Iteratable<T>:实现接口使得对象可以成为“for-each loop”的目标,T是指iterator返回的元素类型函数
操做: Iterator<T> iterator() 返回type T的元素的迭代器。oop
forEach(Cosumer<> superT> action) default意味着没有任何访问修饰符的意思。这个动做提供给出每一个元素的操做。spa
Spliterator<T> spliterator()创造一个由Iterable描述的元素的spliteratorcode
Collection<E>对象
操做:接口
基本操做:rem
元素数量size();hash
空判断isEmpty(); it
移除元素:(1)删除特定元素(2)删除特定集合的元素(3)按条件删除(4)保留特定集合内的元素,其他所有删除(5)删除全部元素。
remove(Object o);removeAll(Collection<?> c);removeIf(Predicate<? super E> filter);retainAll(Collection<?> c);clear();
添加元素 add(E e); addAll(Collection<? extends E> c)
包含判断:(1)单个元素判断,(2)集合判断 contains(Object o);containsAll(Collection<?> c); ?类型通配符
集合的相等判断,须要集合hashcode值。
equals(Object o);hashCode();返回集合类的hashcode,重写equal函数则必须重写hashcode函数。
特殊操做:
转换为数组。Object[] toArray() 返回一个包含全部元素的数组。<T> T[] toArray(T[] a);参数为要转换以后的数组要放置的容器。返回数组的运行时类型与指定数组的运行时类型相同。如 果指定的数组能容纳该 collection,则返回包含此 collection 元素的数组。不然,将根据指定数组的运行时类型和此 collection 的大小分配一个新数组。
Stream<E> stream(); Stream<E> parallelStream()
AbstractCollection<E> 受保护的构造器
实现的接口中的函数:
contains(Object o):集合中能够添加空元素,当Object为null,必须在集合中找到为Null的元素。虽然null能够做为集合中的元素,可是对象比较时用的是equal函数,而Null对象不能直接调用equal函数,因此必须单独判断。
removeAll(Collection<?> c), retainAll(Collection<?> c); remove(Object o); containsAll(Collection<?> c);addAll(Collection<? extends E> c);clear()
新添加的函数:
Object[] toArray() 将对象返回为Object类的数组。这里考虑了集合的size可能与容器自己的个数不一样。collection的元素比size算出的要小则建立新的数组,若比size大,则从新申请一个数组,而且复制r中的元素,而后赋值给r。
T[] toArray(T[] A)(<T>表示这个方法是一个泛型方法,其中泛型参数名为T。)这里考虑了定义的数组A大小可能比应存放的数量(size())要小,所以会运用反射机制建立一个新的类做为返回,可是若发现collection中元素的个数(has.next())其实比a的容量要小,则把目前的元素放入a,而后返回。这个函数在添加对象时会作类型的强制转换,因此是能够支持集合类的类型与T不一样。System.arraycopy()与Array.copy()
这里涉及了两个数组复制的方法,Array.copyof()与System.arraycopyof().区别是Array中的赋值借助System中的复制实现,Array返回一个新建立的数组,而System中的copy在给定的数组之间复制。
<T> T[] finishToArray(T[] r, Iterator<?> it)
toString() : 返回[a,b,c]
Iterator<E>提供几个基本操做: hasNext(), next(), remove()(删除迭代器上次返回的元素)