1.Iterable
集合框架最顶端的接口,实现接口的遍历。迭代器接口
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);
}
}
1.1iterator()
这个方法返回的是Iterator的实例。Iterator也是一个接口,为什么不将两个接口合并为一个那?
原因是实现了Iterable的类可以在实现多个Iterator内部类,例如LinkedList中的ListItr和DescendingIterator两个内部类,就分别实现了双向遍历和逆序遍历。通过返回不同的Iterator实现不同的遍历方式,这样更加灵活。如果把两个接口合并,就没法返回不同的Iterator实现类了。
1.2forEach(Consumer<? super T> action)
循环容器中的元素,并对每个元素进行 action 操作,容器中不能有空元素,否则或抛出 NullPointerException 异常。
1.3spliterator()
Spliterator接口是1.8新加的接口,字面意思可分割的迭代器,不同以往的iterator需要顺序迭代,Spliterator可以分割为若干个小的迭代器进行并行操作,既可以实现多线程操作提高效率,又可以避免普通迭代器的fail-fast机制所带来的异常。Spliterator可以配合1.8新加的Stream进行并行流的实现,大大提高处理效率。
2.Collection
Collection是最基本集合接口,接口中为子集合定义了各种基础的方法,方便我们使用。
2.1int size();
方法返回一个int类型的值,代表集合中元素的个数,如果集合中的元素个数超过正数的最大值,那么只能返回正数的最大值。
2.2boolean isEmpty();
返回一个boolean类型的值,代表当前集合是否为集合。
2.3boolean contains(Object o)
返回boolean值代表集合中是否含有这个元素,这个方法比较依赖对象中的重写过的equals方法,如果没有重写equals方法,那么代表是否含有该内存位置的对象。参数o如果不是Collection指定的泛型类型,会报ClassCastException异常。参数为null,但是Collection要求不能存在null值的时候报NullPointerException异常。
2.4Object[] toArray()、 T[] toArray(T[] a)
两个方法都是将集合中的元素以数组的形式返回,如果集合规定了一个迭代器,那么集合返回的数组会按照迭代器规定的顺序排列后返回。第二个方法会返回一个指定类型的结合,这里的参数T[] a的作用只是提供一个泛型的类型以及一个数组的长度,如果集合的长度大于传入参数a数组的长度,返回的数组长度与集合长度相同,如果集合长度小于传入参数a数组的长度,返回的数组长度与参数a数组的长度相同,但是比集合元素多出来的所有位置的都为null。
如果指定数组a的运行时类型跟数组内元素的类型不同时,会报java.lang.ArrayStoreException如果数组a为null,报NullPointerException
2.5boolean add(E e)
向集合中添加元素
2.6boolean addAll(Collection<? extends E> c)
向集合中添加参数集合的所有元素
异常:
如果集合不支持添加操作,报UnsupportedOperationException
如果e的类型被集合指定不允许添加,报ClassCastException
如果元素的某些属性导致元素不能被添加到集合中,报IllegalArgumentException
如果元素不能在这个时候被添加到集合中,报IllegalStateException
如果元素为null,但是集合中不允许出现null元素,报NullPointerException.
2.7boolean remove(Object o)
移除集合中的指定元素
2.8boolean removeAll(Collection<?> c)
移除原集合中所有在参数集合中出现过的元素
异常:
指定的元素o的运行时类型与集合指定的泛型不匹配时,报ClassCastException
指定对象中包含一到多个null元素,但是集合中不允许出现null时,报NullPointerException
如果该集合不支持移除操作,报UnsupportedOperationException
2.9clear()
清楚集合内的所有元素,异常:如果clear操作不被集合支持,抛出UnsupportedOperationException异常
3.List
通过List源码注释大体可以知道List集合接口继承至Collection接口,有序集合、允许重复、允许空值。