Collection接口概览
目录
Iterable接口
lterable继承关系:
lterable接口声明方法:
iterator() | 返回集合类型的内部迭代器 |
forEach(Consumer<? super T> action) | 有默认实现方法的forEach(lambda) |
spliterator() | 有默认的实现方法,用于集合的并行遍历 |
lterable接口的部分源码:
public interface Iterable<T> {
// 返回一个迭代器
Iterator<T> iterator();
// 默认实现的遍历方法
default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}
// 返回一个用于并行遍历的迭代器
default Spliterator<T> spliterator() {
return Spliterators.spliteratorUnknownSize(iterator(), 0);
}
}
ArrayList实现类部分源码:
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{
// iterator方法返回一个实现了Iterator接口的类
public Iterator<E> iterator() {
return new Itr();
}
// ArrayList的私有类,实现了Iterator接口
private class Itr implements Iterator<E> {
...
}
}
举例:
@Test
void iterable() {
List<Integer> integers = new ArrayList<>(List.of(0, 1, 2, 3, 4, 5));
// 返回ArrayList的内部迭代器
Iterator<Integer> iterator = integers.iterator();
// 遍历
integers.forEach(System.out::println);
// 并行遍历
Spliterator<Integer> spliterator = integers.spliterator();
spliterator.forEachRemaining(System.out::println);
}
Collection接口
Collection继承关系
Collection接口声明方法:
contains(Object o) | 若此集合包含指定元素,返回true |
containsAll(Collection<?> c) | 若此集合包含指定的集合,返回true |
toArray() | 返回包含此集合所有元素的数组 |
toArray(T[] a) | 将集合转化为所需类型的数组 |
toArray(IntFunction<T[]> generator) | 返回集合元素通过generator函数处理后的数组 |
removeIf(Predicate<? super E> filter) | 删除符合条件的集合元素(lambda) |
retainAll(Collection<?> c) | 从集合中删除所有未包含在指定集合中的元素 |
stream() | 返回以该集合为源的流 |
parallelStream() | 返回以该集合为源的并行流(也允许返回顺序流) |
Collection的部分源码:
// Collection接口 继承自 Iterable接口
public interface Collection<E> extends Iterable<E> {
// 集合转换为Object类型数组
Object[] toArray();
// 集合转换为特定类型的数组
<T> T[] toArray(T[] a);
// 返回集合各元素经过generator函数处理后的数组
default <T> T[] toArray(IntFunction<T[]> generator) {
return to