java集合类源码详解-LinkedList(1)-基于JDK8

从今天开始 终于进入了LinkedList的学习(本人学习的是jdk8)。LinkedList跟ArrayList还是有很多地方相似的,先看看这个类的大概结构。

 LinkedList 继承的抽象类是AbstractSequentialList ,而 AbstractSequentialList 是继承自 AbstractList 。

AbstractList是什么呢?它是ArrayList的父类。所以LinekList和ArrayList都肯定有些方法是同名的,只是实现不同。

LinkedList (线程不安全,可以添加null)底层实现是一个双向链表(带头结点)-----增加,删除元素很快,查找,修改元素很慢,既然是链表,那么它肯定也可以用来表示堆栈,队列。

而且链表添加节点和删除节点是通过移动指针,所以,它不需要像ArrayList那样需要扩容函数,预留空间这些。其空间效率比ArrayList高。LinkdList 每当增加删除元素时 都会修改modCount。

为什么说它是双向链表呢? 在这个类的底层有个内部类定义了其底层的数据结构

这个有两个引用(可以暂时理解为指针),一个指向的是前一个节点,一个指向的是后一个节点,这里就很明显的说明LinkedList底层是双向链表,那它 会不会是双向循环链表呢。

这个方法是在链表的末尾添加节点,但是并没有把尾节点指向头节点,这说明这不是循环的链表。关于这个方法的详情,后面再继续学习。 

不过这里first和last是什么呢。

这里可以清晰的看到,last 和first都是 Node类型, 所以他们都是引用了一个Node节点,用C/C++ 来理解其实就是指向一个Node类型的节点

下面可以看看 LinkedList的结构,图片来自网络,图中 这里两个节点中间有个箭头不是 一个节点的next指向下个节点的next

仅仅是一个节点指向下一个节点,prev也是同理

好了,到这里LinkedList的结构大致了解了下,接下来,开始写程序进行调试。

测试的顺序分布是:构造函数---->增加,删除,修改,查找函数--->迭代函数。这些都是常用的,如果后续时间有限,将继续学习其他方法。

猜你喜欢

转载自blog.csdn.net/qq_37889257/article/details/84836290