目录
1.Iterable
1.1iterator()
1.2forEach(Consumer action)
1.3spliterator()
2.Collection
2.1int size();
2.2boolean isEmpty();
2.3boolean contains(Object o)
2.4Object[] toArray()、 T[] toArray(T[] a)
2.5boolean add(E e)
2.6boolean addAll(Collection c)
2.7boolean remove(Object o)
2.8boolean removeAll(Collection c)
2.9clear()
3.List
3.1replaceAll
3.2sort
3.3boolean addAll(int index, Collection c)
3.4E get(int index)
3.5E set(int index, E element)
3.6void add(int index, E element)
3.7E remove(int index)
3.8int indexOf(Object o)
3.9int lastIndexOf(Object o)
3.10ListIterator listIterator();
3.11ListIterator listIterator(int index)
3.12List subList(int fromIndex, int toIndex)
集合是个庞大的家族。层次关系如下:
集合框架最顶端的接口,实现接口的遍历。迭代器接口
public interface Iterable {
Iterator iterator();
default void forEach(Consumer super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}
default Spliterator spliterator() {
return Spliterators.spliteratorUnknownSize(iterator(), 0);
}
}
这个方法返回的是Iterator的实例。Iterator也是一个接口,为什么不将两个接口合并为一个那?
原因是实现了Iterable
的类可以在实现多个Iterator
内部类,例如LinkedList
中的ListItr
和DescendingIterator
两个内部类,就分别实现了双向遍历和逆序遍历。通过返回不同的Iterator
实现不同的遍历方式,这样更加灵活。如果把两个接口合并,就没法返回不同的Iterator
实现类了。
循环容器中的元素,并对每个元素进行 action 操作,容器中不能有空元素,否则或抛出 NullPointerException 异常。
Spliterator接口是1.8新加的接口,字面意思可分割的迭代器,不同以往的iterator需要顺序迭代,Spliterator可以分割为若干个小的迭代器进行并行操作,既可以实现多线程操作提高效率,又可以避免普通迭代器的fail-fast机制所带来的异常。Spliterator可以配合1.8新加的Stream进行并行流的实现,大大提高处理效率。
Collection是最基本集合接口,接口中为子集合定义了各种基础的方法,方便我们使用。
方法返回一个int类型的值,代表集合中元素的个数,如果集合中的元素个数超过正数的最大值,那么只能返回正数的最大值。
返回一个boolean类型的值,代表当前集合是否为集合。
返回boolean值代表集合中是否含有这个元素,这个方法比较依赖对象中的重写过的equals方法,如果没有重写equals方法,那么代表是否含有该内存位置的对象。参数o如果不是Collection指定的泛型类型,会报ClassCastException异常。参数为null,但是Collection要求不能存在null值的时候报NullPointerException异常。
两个方法都是将集合中的元素以数组的形式返回,如果集合规定了一个迭代器,那么集合返回的数组会按照迭代器规定的顺序排列后返回。第二个方法会返回一个指定类型的结合,这里的参数T[] a的作用只是提供一个泛型的类型以及一个数组的长度,如果集合的长度大于传入参数a数组的长度,返回的数组长度与集合长度相同,如果集合长度小于传入参数a数组的长度,返回的数组长度与参数a数组的长度相同,但是比集合元素多出来的所有位置的都为null。
如果指定数组a的运行时类型跟数组内元素的类型不同时,会报java.lang.ArrayStoreException如果数组a为null,报NullPointerException
向集合中添加元素
向集合中添加参数集合的所有元素
异常:
移除集合中的指定元素
移除原集合中所有在参数集合中出现过的元素
异常:
指定的元素o的运行时类型与集合指定的泛型不匹配时,报ClassCastException
指定对象中包含一到多个null元素,但是集合中不允许出现null时,报NullPointerException
如果该集合不支持移除操作,报UnsupportedOperationException
清楚集合内的所有元素,异常:如果clear操作不被集合支持,抛出UnsupportedOperationException异常
通过List源码注释大体可以知道List集合接口继承至Collection接口,有序集合、允许重复、允许空值。
除了继承Collection的方法为,下面是List比Collection多的方法
1.8中出现的新方法,接收lambda表达式生成的一个UnaryOperator对象,对list中的每个对象进行替换操作
1.8中新增的方法,让list的调用自己的方法就能实现排序,不必再实现comparable接口或者使用Collections类的排序方法进行排序,其实底层调用了Arrays方法对list进行排序,方法同样支持lambda的函数式编程,
将指定的集合插入到该序列中的指定的index位置
获取序列中指定位置的元素
用指定的元素替换序列中指定位置的元素
在序列指定位置中添加元素
移除序列中指定位置的元素
获取指定元素第一次在序列中出现的位置
获取指定元素最后一次在序列中出现的位置
返回列表元素的列表迭代器(按适当顺序)
返回列表元素的列表迭代器(按适当顺序)
返回该序列中从fromIndex到toIndex中的一个子序列(子列表其实还是这个列表一部分,改变了会改变该序列)