rt.jar -> java.util
package java.util;
import java.util.function.Predicate;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
//集合根接口
public interface Collection<E> extends Iterable<E> {
//返回这个集合内元素的数量,如果数量超过Integer的最大值则返回Integer的最大值
int size();
boolean isEmpty();
//如果传入的元素在这个集合中返回true
//如果传入的元素不符合集合类型报ClassCastException类型转换异常
//如果传入的元素为Null报NullPointerException空指针异常
boolean contains(Object o);
//返回一个迭代器
Iterator<E> iterator();
//返回包含此集合中所有元素的数组。
Object[] toArray();
//返回包含此集合中所有元素的数组,此外,这种方法允许精确控制输出数组的运行时类型,
<T> T[] toArray(T[] a);
boolean add(E e);
boolean remove(Object o);
boolean containsAll(Collection<?> c);
boolean addAll(Collection<? extends E> c);
boolean removeAll(Collection<?> c);
//删除该集合中满足给定条件的所有元素。
//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;
}
//仅保留该集合中包含的元素。
boolean retainAll(Collection<?> c);
//从这个集合中删除所有元素(可选操作)。
void clear();
boolean equals(Object o);
int hashCode();
//Spliterator(splitable iterator可分割迭代器)接口是Java为了并行遍历数据源中的元素而设计的迭代器,
//这个可以类比最早Java提供的顺序遍历迭代器Iterator,但一个是顺序遍历,一个是并行遍历
@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);
}
}