源码解析仅个人记录,若有不正确,请留言修改
package java.util;
import java.util.function.Predicate;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
/**
*
* @author jclyzx
* @time 2018年9月21日上午10:34:30
*
* @param <E>
*/
public interface Collection<E> extends Iterable<E> {
/**
* 获取迭代器
* 父类方法重写,上篇讲过返回一个顺序执行的迭代器
* @return
*/
Iterator<E> iterator();
/**
* 获取元素个数
* @return
*/
int size();
/**
* 是否个数为 0,即集合是否为空
* @return
*/
boolean isEmpty();
/**
* 是否包含指定元素
* @param o
* @return
*/
boolean contains(Object o);
/**
* 是否包含指定集合 c 的全部元素
* @param c
* @return
*/
boolean containsAll(Collection<?> c);
/**
* 添加元素,成功时返回 tru
* @param e
* @return
*/
boolean add(E e);
/**
* 删除元素,成功时返回 tru
* @param o
* @return
*/
boolean remove(Object o);
/**
* 添加集合 c 中所有的元素到本集合中,如果集合有改变就返回 true
* @param c
* @return
*/
boolean addAll(Collection<? extends E> c);
/**
* 删除本集合中和 c 集合中一致的元素,如果集合有改变就返回 true
* @param c
* @return
*/
boolean removeAll(Collection<?> c);
/**
* 保留本集合中 c 集合中两者共有的,如果集合有改变就返回 tru
* @param c
* @return
*/
boolean retainAll(Collection<?> c);
/**
* 删除所有元素
*/
void clear();
/**
* 返回一个包含集合中所有元素的数
* @return
*/
Object[] toArray();
/**
* 返回一个包含集合中所有元素的数组,运行时根据集合元素的类型指定数组的类型
* @param a
* @return
*/
<T> T[] toArray(T[] a);
/**
* Object父类比较方法重写
* @param o
* @return
*/
boolean equals(Object o);
/**
* Object父类hashCode方法重写
* @return
*/
int hashCode();
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;
}
/**
* @time 2018年9月21日上午10:45:57
* @return 返回一个并行执行的迭代器
*/
@Override
default Spliterator<E> spliterator() {
return Spliterators.spliterator(this, 0);
}
/**
* @author jclyzx
* @time 2018年9月21日上午10:42:57
* @return 返回一个流
*/
default Stream<E> stream() {
return StreamSupport.stream(spliterator(), false);
}
/**
* @author jclyzx
* @time 2018年9月21日上午10:45:18
* @return 返回一个并行流
*/
default Stream<E> parallelStream() {
return StreamSupport.stream(spliterator(), true);
}
}