import java.util.Objects;
import java.util.function.Predicate;
import java.util.stream.StreamSupport;
/**
* @Classname Collection:定义了一组对象和它的子类需要实现的15个方法
* @author 10292356
* @date 2021年7月5日 下午8:48:46
* @Version 1.0
*/
public interface Collection<E> extends Iterable<E> {
/**
* @Description:对集合元素的基本操作方法
*/
// 返回集合的长度
int size();
// 如果集合的元素总数为0,返回true
boolean isEmpty();
// 判断集合是否包含某个元素,其依据是超类的equals()方法
boolean contains(java.lang.Object object);
// 新建一个迭代器
Iterator<E> iterator();
// 向集合中添加一个元素
boolean add(E e);
// 删除一个特定元素
boolean remove(Object o);
/**
* @Description:对数组操作的方法
*/
// 返还一个包含所有元素的数组
Object[] toArray();
// 返还一个包含所有元素且能强制转换的数组
<T> T[] toArray(T[] a);
/**
* @Description:一些操作整个集合的方法
*/
// 判断指定集合的元素是否都在集合内
boolean containsAll(Collection<?> c);
// 向集合中添加一个指定集合
boolean addAll(Collection<? extends E> c);
// 向集合中删除一个指定集合
boolean removeAll(Collection<? extends E> c);
// 仅保留集合中包含在指定集合中的元素
boolean retainsAll(Collection<? extends E> c);
// 清空集合
void clear();
// 确保所有子类都重写此方法
boolean equals(Object o);
// 确保所有子类都重写此方法
int hashCode();
// 新增的默认实现方法Predicate函数式接口,会使用Iterator的形式删除符合条件中的元素
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;
}
// 重写Spliterator
default Spliterator<E> spliterator(){
return spliterator.spliterator(this,0);
}
/**
* @Description:提供了从集合获取连续的或并行的流
*/
// 新增的默认实现方法Stream流式接口
default Stream<E> stream(){
return StreamSupport.stream(spliterator(), false);
}
default Stream<E> parallelStream(){
return StreamSupport.stream(spliterator(), ture);
}
}
集合类源码之Collection接口(一)
最新推荐文章于 2022-10-17 18:12:26 发布