JAVA容器浅入深出之ArrayList

最近鼓捣自己的那个小项目(几近难产)时候, 就琢磨了两个问题

一、 为什么要在项目中使用相互之间很相似的DAO层和Service层

二、 我经常使用的JAVA容器到底是一个什么样的类?

关于第一个问题,我经过一段时间的学习和查找资料,已经得到了,算是自己的见解吧。。。 虽然我发帖将这个见解公布后被围攻吧。。。有想了解这个的,可以看我以前的博文。

 

现在吧。 开始琢磨第二个问题了

容器类集我感觉东西还是很多的, 也不能慌,一口吃不了一个大胖子么。

到目前为止,我主要看了Collection接口,List接口,Iterator接口, AbstractCollection抽象类, AbstractList抽象类, ArrayList实现类, LinkedList粗略的看了一点。 打算明天继续琢磨

 

前面的接口和抽象类都是一些规范和公有操作, 而在ArrayList才看到了真正的一个容器底层实现,说是底层实现吧。 很尴尬。。。 就是一个封装了数组的对象而已, 感觉很容易理解,将自己看到的一些不知道对错的见解都记录下来吧:

    1、 ArrayList容器是通过封装Object[]实现动态存储的

    2、 ArrayList的修改容量操作【比如add操作】应该比较消耗资源,毕竟需要修改内部数组Object[]呢, 但是也不是每一次add操作都需要修改, 每一次add操作都会通过ensureCapacity方法确保当前ArrayList内Object[]的容量够用,而这个方法实现也比较简单,它通过比较ArrayList记录的元素数量和Object[]的length的大小, 如果前者不小于后者的话,则生成一个新的数组,这个数组的大小好像是原数组的1.5倍。而LinkedList是使用链表的方式添加一个新元素,效率上比ArrayList大多了, 删除元素,ArrayList也会新生成一个数组。 如果内部容量过多的话, 是不是得多慢啊。。。

    3、 ArrayList里面的与指定index位置操作有关的方法,我感觉设计的并不完美,也不统一, 有几个方法使用了调用RangeCheck方法判断给定的index是否合理,而这个方法是通过“if (index >= size)” 判断的, 然后还有几个方法没有使用这个方法,直接使用“if (index > size || index < 0)”判断。 我感觉可以将他们都统一一下, 但是这个小问题无关大雅了, 可能JDK源码编写者当时分神了吧。。。或者是我没看明白源码吧。。。

    4、 ArrayList通过内部的Object[]存储全部元素, 一般情况下ArrayList的size()是小于Object[].length的, 因为ArrayList内部为了避免过多频繁的更新这个Object[], 将这个数组的容量设定的比size()大“0倍到0.5倍”, 当然可以使用一种方法让size()恰好等于Object[].length,这个方法就是trimToSize(), 如果这个容器的元素比较多,并且这个容器很长时间内元素不会继续添加的话, 可以使用这个方法, 释放掉Object[]多占的内存

 

ArrayList的具体迭代器实现类继承自父类AbstractList, 这个迭代器是一个内部类(内部类才能直接操作ArrayList内部元素吗!), 迭代操作其实我感觉和直接通过ArrayList的for遍历差不多, 但是这个迭代器是安全的操作,因为这个迭代器通过ArrayList的modCount变量记录控制多次迭代之间,这个ArrayList的结构不会发生变化或混乱, 如果ArrayList的结构发生变化, 这个modCount属性将自加一, 而加一之后, 在加一之前获取到的这个ArrayList实力的迭代器都无效了(应该是这样吧, 有点小迷了。。。有高手发现错误的话,指点一下啊)

 

说真的, 刚才还感觉有点迷呢, 自己总结了一个博文之后,感觉思路清晰多了

内容概要:本文系统介绍了算术优化算法(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、付费专栏及课程。

余额充值