偷了一年的懒,从今天开始努力学习。保证每天至少一篇技术研究的文字吧。首先要把所有常用的集合全部梳理一遍,从最顶层的接口Collection开始。
Collection(集合)接口是JAVA程序员最常用的接口之一,每天用几十遍的各路LIST和SET都继承了这个接口,一个值得注意的误区是Map并未继承,数据结构上Map是键值对而Collection是元素是集合。具体的继承关系见下图:
如图所示,Collection是集合的最顶层接口,并且没有任何直接实现。
同时,Collection继承了Literable接口,该接口提供了Literator(迭代器)用于遍历集合中的元素,JDK1.5之后该接口还提供了使用forEach(增强型for循环)的能力,在1.8版本后Literable接口还提供了foreach(Comsumer action)方法,这个方法可以让Collection中的元素遍历执行被传入的函数,也就是函数式编程上的拓展.以及Spliterator(可分割遍历迭代器),用于并行遍历元素。
Collection声明了控制集合所需的大量方法,比较常用不需要废话的方法有size()(值得注意的是,这个方法的返回值最大为int(整形)数的最大值。哪怕实际大小超过这个数也是这样返回。)、isEmpty()、contains、toArray(T[])(值得注意的是,如果list排序了,返回的数组也会排序)、add(如果不是因为重复而拒绝添加元素,Collection必须抛出异常,如果是因为不能重复元素而拒绝添加则返回false)、containsAll()、addALL()、removeAll()、clear().
JDK1.8新增两个方法,stream()方法和paralleStream()(并行流)方法能使我们获得一个集合的流对象,用来进行函数式编程方式的集合复杂操作。同样新增的还有removeIf(Predicate filter)方法,这个方法可以方便的除去集合中满足传入的函数的元素。例如list.removeIf(s->s.equals("1"));会去除集合中满足了等于“1”的字符串。
还有我没用过的retainAll(Collection)(取交集)方法,如果集合包含传入的集合,则保留交集,否则将集合置空。
以上。