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