Java面向对象基础知识之数组和链表

 更新时间:2021年11月08日 10:02:14   作者:一指流砂~  
这篇文章主要介绍了Java面向对象的之数组和链表,文中有非常详细的代码示例,对正在学习java基础的小伙伴们有很好的帮助,需要的朋友可以参考下

数组的优点:

  • 随机访问性强
  • 查找速度快
    • 数组要求是一块连续的内存空间来存储,这就要求在物理上这一片空间是连续的,每个元素都有指定的索引index指向内存地址,因此查询对时候,可根据index快速找到对应地址存储的信息,此为查询快.

数组的缺点:

  • 插入和删除效率低
    • 数组进行增删的时候,就必须将目标位置后的所有元素都整体移动,因此就比较耗时,此为增删慢.
  • 可能浪费内存
  • 内存空间要求高,必须有足够的连续内存空间。
  • 数组大小固定,不能动态拓展

链表的优点:

  • 插入删除速度快
    • 链表在物理上是动态地分配储存空间,不要求连续性,但是要求逻辑上的连续。它需要存储每个元素在内存中的地址,以及它相邻元素的地址,然后像链条一样把各元素链起来,保证了在逻辑上的连续性。

比如:

单链表,每个元素除了存储本身的值外,还存储了前驱的引用,也就是存储了前驱所在的内存地址信息。

双链表就是不仅存储了前驱的引用还存储了后继的引用.

  • 增加元素的时候,只需给增加元素添加其前元素或后元素的地址;删除元素的时候,修改目标元素前驱和后驱的首位连接地址. 故此为增删快。
  • 内存利用率高,不会浪费内存大小没有固定,拓展很灵活。

链表的缺点:

  • 不能随机查找,必须从第一个开始遍历,查找效率低
    • 由于没有像数组那样的索引,因此,查询的时候需要遍历整个链表所有元素的内存地址,然后才能确定目标元素,此为查询慢。

内存中的存储形式可以分为连续存储和离散存储两种。因此,数据的物理存储结构就有连续存储和离散存储两种,它们对应了我们通常所说的数组和链表。

因为数组是连续存储的,在操作数组中的数据时就可以根据离首地址的偏移量直接存取相应位置上的数据,但是如果要在数据组中任意位置上插入一个元素,就需要先把后面的元素集体向后移一位为其空出存储空间。

与之相反,链表是离散存储的,所以在插入一个数据时只要申请一片新空间,然后将其中的连接关系做一个修改就可以,但是显然在链表上查找一个数据时就要逐个遍历了。

考虑以上的总结可见,数组和链表各有优缺点。在具体使用时要根据具体情况选择。当查找数据操作比较多时最好用数组;当对数据集中的数据进行添加或删除比较多时最好选择链表。

数组就像身上编了号站成一排的人,要找第10个人很容易,根据人身上的编号很快就能找到。但插入、删除慢,要望某个位置插入或删除一个人时,后面的人身上的编号都要变。当然,加入或删除的人始终末尾的也快

链表就像手牵着手站成一圈的人,要找第10个人不容易,必须从第一个人一个个数过去。但插入、删除快。插入时只要解开两个人的手,并重新牵上新加进来的人的手就可以。删除一样的道理。

总结:

  • 数组静态分配内存,链表动态分配内存;
  • 数组在内存中连续,链表不连续;
  • 数组元素在栈区,链表元素在堆区;
  • 数组利用下标定位,时间复杂度为O(1),链表定位元素时间复杂度O(n);
  • 数组插入或删除元素的时间复杂度O(n),链表的时间复杂度O(1);

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!

相关文章

  • Springboot GET和POST请求参数获取方式小结

    Springboot GET和POST请求参数获取方式小结

    Spring Boot GET和POST请求参数获取是开发人员经常需要解决的问题,本文主要介绍了Springboot GET和POST请求参数获取方式小结,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • 详解Java中类的加载与其初始化

    详解Java中类的加载与其初始化

    这篇文章主要为大家详细介绍了Java中类的加载与其初始化的相关资料,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以了解一下
    2022-12-12
  • 基于maven的springboot的"过时"用法解析

    基于maven的springboot的"过时"用法解析

    这篇文章主要为大家介绍了基于maven的springboot"过时"用法示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • Java实现输出回环数(螺旋矩阵)的方法示例

    Java实现输出回环数(螺旋矩阵)的方法示例

    这篇文章主要介绍了Java实现输出回环数(螺旋矩阵)的方法,涉及java针对数组的遍历、判断、输出等相关操作技巧,需要的朋友可以参考下
    2017-12-12
  • Java中定时任务的6种实现方式

    Java中定时任务的6种实现方式

    这篇文章主要给大家分享的是Java中定时任务的6种实现方式,几乎在所有的项目中,定时任务的使用都是不可或缺的,如果使用不当甚至会造成资损,下面文章我们就来看看Java中定时任务的具体使用方式吧
    2021-10-10
  • Java Arrays.sort()用法详解

    Java Arrays.sort()用法详解

    这篇文章主要介绍了Java Arrays.sort()用法详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • Springboot插件开发实战分享

    Springboot插件开发实战分享

    这篇文章主要介绍了Springboot插件开发实战分享,文章通过新建aop切面执行类MonitorLogInterceptor展开详细的相关内容,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-05-05
  • 排查Java进程内存占比过高的方法

    排查Java进程内存占比过高的方法

    某天下午运维反应集成环境的一个Java服务内存飙高,内存耗的太高了,会疑似内存泄漏,所以本文记一次排查Java进程内存占比过高的解决方法,需要的朋友可以参考下
    2023-10-10
  • Java的深拷贝与浅拷贝的几种实现方式

    Java的深拷贝与浅拷贝的几种实现方式

    这篇文章主要介绍了Java的深拷贝与浅拷贝的几种实现方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Java中求最大值的4种方法实例代码

    Java中求最大值的4种方法实例代码

    这篇文章主要给大家介绍了关于Java中求最大值的4种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08

最新评论