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

本文详细解析了LinkedList的底层实现原理,包括其双向链表结构、与ArrayList的区别,以及添加、删除等操作的高效性。

从今天开始 终于进入了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的结构大致了解了下,接下来,开始写程序进行调试。

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

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值