LinkedList源码剖析(jdk1.8)
1 | public class LinkedList<E> |
先解释一下两个概念迭代器模式和并行计算
迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示,同时可以让外部代码透明的访问集合内部的数据。foreach就是通过迭代器来实现的。什么时候用迭代器呢?1.当你需要对集合有多种方式遍历时。2.当你遍历一个集合,而不需要管这些对象是什么都要遍历的时候。
并行计算产生的原因:从1986-2002年这期间,微处理器的速度平均每年增长50%。但是自从2003年以后,微处理器的速度跌落到了以每年20%的速度增长。而使用单核计算的话,速度是可以跟上去,但是单核产生的热量会越来越多,风扇技术不能处理产生热量的速度。这样处理大规模的任务的时候,不能依赖一个超强的单核,那么解决的办法是什么呢。就是采用多核。多核的话可以保证在原来的处理器技术至上,将大的任务分割,将分割成的小任务放在处理器上执行。每个处理器其实有很多核(Core)的,每个核每次只能执行一个任务。现在有些计算机的处理器是采用多核多线程,为了简单方便。我们在这里就采用多核,每个核是单线程。
什么是并行计算:比如1+到24,单核需要进行23次加法。如果是八核,每个核分别处理3个数,也就是两次加法,然后0核处理累加0核和1核产生的结果。2核处理2核和3核的。依次类推。最终0核进行最多运算6次。比单核要快很多。
LinkedList总结
- LinkedList是一个双向链表,头结点存放数据(1.7后变的)
- 在查找和删除某元素时,源码中都划分为该元素为null和不为null两种情况来处理,LinkedList中允许元素为null。(这点和ArrayList一样)
- node函数node(index),这个函数用来返回index位置节点的,这里做了个优化,就是判断index和size>>1的对比,从而决定是从前遍历还是从后遍历(学习了计算机中尽量使用位操作)
- 内部实行的peek(返回队列首节点)offer(尾部增加节点) poll(删除首节点)等函数可以是的LinkedList当做队列来使用,而 push(首部增加节点) pop(首部删除节点)函数同样使得LinkedList可以当做栈来使用