看完了Iterable接口,接着来看Collection接口,接口中为子集合定义了各种基础的方法,方便我们使用。
这是一个经常在工作中使用到的接口,Collection接口也有很多比较重要的实现,比如AbstractCollection,List,Set,Queue,CollectionView等都是比较经典的实现,值得好好的研究。
一个一个来看:
Collection,全称java.util.Collection,1.8之后又引入了新的stream元素,更加的强大。
int size()
size()方法返回一个int类型的值,代表集合中元素的个数,如果集合中的元素个数超过正数的最大值,那么只能返回正数的最大值。boolean isEmpty()
返回一个boolean类型的值,代表当前集合是否为集合。boolean contains(Object o)
返回boolean值代表集合中是否含有这个元素,这个方法比较依赖对象中的重写过的equals方法,如果没有重写equals方法,那么代表是否含有该内存位置的对象。
参数o如果不是Collection指定的泛型类型,会报ClassCastException异常。
参数为null,但是Collection要求不能存在null值的时候报NullPointerException异常。Iterator<E> iterator()
重写Iterable中的方法,依然未实现,返回元素迭代器的一个方法。Object[] toArray()
<T> T[] toArray(T[] a)
两个方法都是将集合中的元素以数组的形式返回,如果集合规定了一个迭代器,那么集合返回的数组会按照迭代器规定的顺序排列后返回。第二个方法会返回一个指定类型的结合,这里的参数T[] a的作用只是提供一个泛型的类型以及一个数组的长度,如果集合的长度大于传入参数a数组的长度,返回的数组长度与集合长度相同,如果集合长度小于传入参数a数组的长度,返回的数组长度与参数a数组的长度相同,但是比集合元素多出来的所有位置的都为null。如果指定数组a的运行时类型跟数组内元素的类型不同时,会报java.lang.ArrayStoreException
如果数组a为null,报NullPointerExceptionboolean add(E e)
boolean addAll(Collection<? extends E> c)
作用:7、向集合中添加元素 8、向集合中添加参数集合的所有元素
返回:boolean类型的值,是否添加成功
异常:- 如果集合不支持添加操作,报UnsupportedOperationException
- 如果e的类型被集合指定不允许添加,报ClassCastException
- 如果元素的某些属性导致元素不能被添加到集合中,报IllegalArgumentException
- 如果元素不能在这个时候被添加到集合中,报IllegalStateException
- 如果元素为null,但是集合中不允许出现null元素,报NullPointerException.
boolean remove(Object o)
boolean removeAll(Collection<?> c)
作用:9、移除集合中的指定元素 10、移除原集合中所有在参数集合中出现过的元素
返回:boolean类型的值,是否删除成功
异常:- 指定的元素o的运行时类型与集合指定的泛型不匹配时,报ClassCastException
- 指定对象中包含一到多个null元素,但是集合中不允许出现null时,报NullPointerException
- 如果该集合不支持移除操作,报UnsupportedOperationException
boolean containsAll(Collection<?> c)
作用:检验该集合是否包含指定集合的所有元素
返回:boolean类型的值,是否包含
异常:- 参数集合中有元素的类型跟原集合指定的泛型类型不一致时,报ClassCastException
- 参数集合中包含null元素,但原集合不允许出现null时,报NullPointerException
default boolean removeIf(Predicate<? super E> filter)
作用:删除集合中所有满足删除条件的元素
返回:boolean类型的值,是否有成功的删除
异常:- 如果判断条件为null时,报NullPointerException
- 如果满足条件的元素不能被移除,报UnsupportedOperationException
补充:这个是JDK1.8新加的方法,配合Predicate接口和lambda表达式进行使用。
boolean retainAll(Collection<?> c)
作用:原集合只保留在指定集合中存在的元素,简单点说就是取交集
返回:boolean类型的值,如果原集合发生改变返回true
异常:包含contains方法和remove方法的所有可能抛出异常void clear()
作用:清楚集合内的所有元素
异常:如果clear操作不被集合支持,抛出UnsupportedOperationException异常default Stream<E> stream()
default Stream<E> parallelStream()
1.8新加的方法,结合Stream使用,简单点理解就是一个增强型的迭代器。
两个方法前者获取一个单通道的流处理起,后者获得一个多通道的流处理器
这一段看的代码当中了解到的1.8的新特性主要是流Stream和lambda,有机会整理一下。