简介
java.util.LinkedList
LinkedList 相对 ArrayList 要复杂一些,不是因为链表操作比数组操作复杂,而是 LinkedList 实现了更多接口
LinkedList 除了实现 List 接口外,还实现了 Queue 和 Deque 接口,也就意味着可以作为队列或双向队列使用
对链表的学习非常有帮助
感悟
对于接口的认识
首先要熟悉接口的定义,对于接口的分层是非常有意义的
例如List接口中有些接口方法在Collection接口中已经存在了,但是仍然又必须要重复定义,因为这些方法是List数据结构的特性
抽象类都是作为接口子类的骨架实现
关于LinkedList实现
然后再去研究底层的实现
如果只是对 List 线性表的研究,只需要查看 LinkedList 中关于 List 接口的实现就可以了,其他接口无需关心
有些字段是为了支持其他接口,才加上的
如果只是需要实现List接口,很多代码都可以去掉
也可以自己根据LinkedList代码,实现一个最简版本的List基于链表的实现,去掉多余的代码即可
源码学习
链表的操作比较细致,需要边调试边学习
注意:LinkedList 是双向链表,第一个节点的prev和最后一个节点的next都是null
测试代码:
LinkedList<String> linkedList = new LinkedList<>();
linkedList.add("a");
linkedList.add("b");
linkedList.add("c");
linkedList.add("d");
int b = linkedList.indexOf("b");
String s1 = linkedList.get(1);
linkedList.set(1, "s1");
linkedList.remove(1);
System.out.println(linkedList);