当前位置: 首页 > news >正文

第十二章 ArrayList和 LinkedList的区别

ArrayList:

基于动态数组(自动扩容),连续内存存储,由于底层是数组,适合使用下标进行访问,但扩容一直都是数组的缺点,所以使用尾插法进行扩容可以有效提高扩容效率。还有就是创建ArrayList时可以预估所需要的内存空间,避免减少扩容的次数,利用好这两点可以极大的提高ArrayList的性能也可与LinkedList一较高下。

LinkedList:

基于链表,可以存储在分散的内存中,内存空间紧缺时的第一首选,适合做数据的插入和删除,不适合做查询,需要逐一遍历linkedList必须使用iterator迭代器进行遍历,不能使用for循环 (也不是不能使用,效率低到极致,没人用),因为每次使用for循环的get(i)进行遍历都会重新遍历,性能消耗极大。

另外不能使用indexOf等返回索引,使用indexOf对list进行遍历,当结果为空时会遍历整个列表。

注意:虽然LinkedList的插入和删除很快,但是它的内部维护了一个node节点内部类,每次往LinkedList中新增一个数据都会创建node节点对象,一旦插入的node节点过多就会非常影响LinkedList的性能。

http://www.lryc.cn/news/36732.html

相关文章:

  • 案例06-复用思想的接口和SQL
  • 【Java学习笔记】17.Java 日期时间(2)
  • 【学习Docker(八)】Docker Canal的安装与卸载
  • python的django框架从入门到熟练【保姆式教学】第三篇
  • Open3D(C++) Ransac拟合球体(详细过程版)
  • Antlr Tool与antlr runtime的版本一致性问题
  • 嵌入式中CAN测试自动化方法分析
  • 基于c++、opencv、cuda、Visual Studio编程
  • MATLAB——DFT(离散傅里叶变换)
  • 高端Zynq ultrascale+使用GTH回环测试 提供2套工程源码和技术支持
  • 入门(Createing a scene)
  • Unity入门精要03---透明效果
  • 一文解码:如何在人工智能热潮下实现产业“智”变
  • webshell管理工具-菜刀的管理操作
  • dl----算法常识100例
  • 京东百亿补贴,不要把方向搞偏了
  • Java中的static与final关键字
  • 开学新装备 - 学生党是否该入手 MacBook
  • 【前端技巧】ESLint忽略检查行和文件
  • 单片机学习笔记之点阵(8x8)
  • 我一个普通程序员,光靠GitHub打赏就年入70万,
  • 剖析Spring MVC如何将请求映射到Controller
  • 设计模式之美-工厂模式
  • A Star算法最通俗易懂的一个版本
  • JavaWeb--ListenerAjaxaxiosjson
  • NoneBot2,基于Python的聊天机器人
  • java反射机制及其详解
  • Leetcode—环形链表
  • 蓝牙耳机哪个戴的最舒服?久戴不累的蓝牙耳机推荐
  • 25k的Java开发常问的AQS问题有哪些?