再谈ArrayList LinkedList Set等集合的java原理

英文中有个词语,叫做迭代,名为:Iterable

显然,这是个形容词,叫做可迭代的,于是jdk1.5版本,开始引入了这样一个接口,这样一个interface,看着就很炫,很有概念,很有思想,给人以无限的联想,想着能够实现好多好多的类,仿佛开启了一扇门,进入了新世界

这是所有集合的的接口入口,看到有个iteator,那就是所有集合都可以调用iterator,这个没毛病,例如,list.iterator().xx

  Iterator里面的方法就在下面了,不作解释了

  

   hasNext(),就是用来给实现类寻找数组中的下一个成员是否存在,告诉下一个是否为空,存不存在,指针动吗?不动,当然,结果肯定是布尔值的

   next(),返回类型是E,就是Iterator中的成员,意思是找到数组中下一个成员,并获取,指针么毋庸置疑,肯定动了

   remove(),移除这个成员,

  forEachRemaining(),我们本来有个forEach,现在有添加一个,使用范例:list.iterator().forEachRemaining(str->{   })   这也是一种遍历的新写法,写法高大上而已,jdk1.8开始

forEach是一种新的遍历集合的写法,你说他怎么实现的,不好意思,他语义就这样,就像for循环,你说底层是汇编AJMP跳转,寄存器判断,还是如何,不得而知了

spliterator是一种可分割迭代器,这要来干嘛的?你想,你手上有100万数据,你遍历100万要100万次,如果你的计算机同时遍历25万,分四次,这样不就大大提高了遍历效率?这个方法就是派这个用的,既然能够并行遍历,你想想,那岂不就是多线程遍历?是不是一个新大门?

接下来是Iterable<E>的子接口Collection<E>,这个接口干嘛的?不争,从jdk1.2开始,就存在着这样的一个所有集合的父类接口

 1、size() 获取集合元素大小

2、isEmpty是否为空判断

3、contains是否包含某个对象

4、iterator(),有病不?Iterable接口里面也有这样的方法,

5、toArray(),其实就是把数组中的所有元素组合成为一个新数组,类型都是Object

6、add()

7.remove()

8.containsAll(),这个判断是否包含另外一个数组,布尔返回

9.addAll()

10.removeAll(),移除子数组,显然是父数组的一个子集嘛

11.removeIf() ,其实就是给你整合了一个remove()元素的方法,采用lambda表达式,但是还是要写条件,和for循环移除元素,效果是一样的,真的是为了创新而创新,这样的方法,可读性差,鸡肋

12.retainAll(),集合调用了这个方法,参数是另外一个集合,只有参数是原集合的子集,返回结果是true,怎么样,这种方法新奇不?

13.clear(),这个方法干嘛的?将集合中的所有元素清除,不争了把?

14.equals() ,判断集合对象是否相等,注意是值相等,对象相等可以用等号的

15.hashCode(),这个计算数组集合的hashcode,不用解释了吧

16.spliterator(),这个和Iterable里面的一样的,只是接口的继承之后,又重写了一遍,为啥这样?这样才能体现出重写的特点嘛,你看,Override都写上了,目的就是为了集合在调用spliterator的时候,这个方法再调用父类Iterable的iterator(),

 17.stream(),这个是可以并行化操作的类似于Iterator的的一种stream()

18.paralleStream(),一种并行的玩意儿,调用了之后,可以最大程度的来使用并行操作,很时髦,很酷炫的操作

猜你喜欢

转载自www.cnblogs.com/cyh2009/p/12707003.html