【Java集合框架】LinkedList进阶

1.LinkedList的底层如何实现的。

LinkedList底层数据结构是采用双端链表【一个指向第一个节点的指针,一个指向最后一个节点的指针】

2.LinkedList的使用场景。

对于频繁进行插入和删除的情况使用LinkedList 的效率相对于ArrayList 更高

ArrayList和LinkedList的get();

ArrayList里面的数据就好像 排好队的学生,已经为每一个学生编号[从0-n],当老师叫多少号时,该编号的学生就直接出列了;

LinkedList使用的双向链表来保存数据的,每一个结点只保存了下一个结点和上一个结点的地址,没有任何编号,当老师想叫某名学生[传递给LinkedList的是一个int位置]出列时,LinekdList获取该位置时首先和整个LinkedList的size/2  做比较,前半部分做顺序遍历,后半部分做逆序遍历;但每次遍历都得从第一个元素或者最后一个元素开始遍历,即LinkedList get任意位置的元素时,都会把前面的数据给遍历一遍【这就是使用for 循环遍历LinkedList[数据量比较大时,>10w时]比较慢的原因】

3.LinkedList  增、删、查 的源码

LinkedList add 源码[JDK1.7.0_79]

LinkedList 调用 add() 方法时,默认是添加到链表的尾部;也有从链表头部进行添加的方法,addFirst()

LinkedList remove  源码

LinkedList get 源码

        LinkedList 在进行get 获取指定位置的元素时,采用折半查找的算法,首先判断指定位置在一半之前还是一半之后,然后再进行循环遍历,获取指定位置的元素,将其返回。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容