在java中,数组定义为一种基本类型,其可以通过下标获取到对应位置的数据。那么这种结构的数据,在内存中是怎么存放的呢?
数组的结构示意图正如上图所示,数组在内存中是一段连续的存储单元,每个数据依次放在每个单元中。分析这种结构,我们可以得出以下几个结论:创建一个数组,必须声明其长度,以在内存中寻找合适的一段连续存储单元。这也意味着数组的大小是固定的,我们无法动态调整其大小。想要获取数组中第i个元素,其时间复杂度是 O(1),因为可以根据其地址直接找到它。同理修改也是。数组对查询表现一般,要想查找一个元素,需要遍历,时间复杂度为O(n)。因为地址连续,想要在数组中插入一个元素是复杂的,因为从插入位置起,后边的所有元素都需要向后移动一位。同理删除也是,只是移动方向为向前。并且,当数组存满时,就无法继续插入了。因为数组要占据一整块内存,有可能产生许多的碎片,也可能因为找不到合适的内存块,而导致存储失败。总结起来就是:数组大小固定,查找迅速,增删复杂,需要完整的内存块,容易产生碎片。链表链表是一种离散存储结构,其在内存中存储不是连续的,每个数据元素都通过一个指针指向其下一个元素的地址。根据指针域的不同,链表又分为单链表、双向链表、循环链表等,这里我们只分析单链表。示意图如下所示:链表的结构示意图分析这种结构,我们可以得出以下几个结论:声明一个链表时,不需要知道其长度,也不需要连续的内存块,所以其大小可以动态调整。链表的每个元素都分为数据域和指针域,前者是实际存储的数据,后者则指向下一个元素的地址。和数组相比,每个元素需要占用的内存更大了。要获取链表的第 i 个元素变得复杂,因为其地址存放在它上一个元素的指针域里,所以只能从第一个元素起,进行 i 次操作。同理修改也是。链表对查询表现也一般,需要遍历,时间复杂度为O(n)。增加与删除一个元素更方便了,因为没有对内存地址的限制,我们只需要在对应节点合理处理下指针域的值,就可以把一个元素插入链表或者从链表删除。链表对内存的要求很小,只要能够存储下一个数据元素的内存块都可以使用,因此不会造成碎片化。总结起来就是:大小可以动态调整,增删迅速,查找较慢,数据元素所占内存略多,不需要整块内存块,不会造成碎片化。数组与链表的选择通过以上分析,数组和链表对我们影响最大的几点区别在于:数组按位置查找迅速,链表增删方便数组是固定大小,链表可以随时扩充与缩减链表每个元素占据内存略多于数组数组和链表在查询方面表现都比较一般,耗时较长在数据量很小,内容基本固定时,我们选择何种数据结构的影响并不大。但当数据量较大时,如果我们需要对数据进行频繁的插入删除,我们应该选择链表,如果我们需要频繁的获取某个位置的元素,我们应该选择数组。数组与链表并没有明确的优劣之分,根据不同的使用场景进行不同的选择,才是这两种结构使用的最佳方式。

java数组和链表区别相关推荐

  1. java数组和链表的区别_java中链表和数组的区别?

    综述:数组是线性结构,可以直接索引,即要去第i个元素,a[i]即可.链表也是线性结构,要取第i个元素,只需用指针往后遍历i次就可.貌似链表比数组还要麻烦些,而且效率低些. 想到这些相同处中的一些细微的 ...

  2. 【Java 数组和集合 区别及使用案例】

    Java中数组和集合都是用来存储一组数据的容器,但是在实际使用中,它们有一些区别和不同的使用场景. 数组 vs 集合:存储方式 数组是一个固定长度的容器,它的长度一旦被初始化之后,就无法再改变了.而集 ...

  3. java数组和链表6_java的数组和链表从熟系到陌生

    s[1][2] = 26; 数组实现数据结构: 数据结构的作用:模拟生活中的数据存储:对数据进行增删改查 和数据库的区别 对该同学信息进行增删改查 数据库是把数据存到磁盘里面,他支持可调定式 电脑存数 ...

  4. java数组和链表查询效率及增删效率比较

    相比链表而言,数组的查找速度快,但是增删速度比较慢 数组查找速度比较快的原因:数组结构在堆内存中存放的位置是连续的,链表结构位置则是分散的,通过指针来指向下一个数据节点的位置.当进行查询操作时,数组结 ...

  5. 面试题:数组和链表区别

    1.数组的存储空间是连续,链表是动态内存分布 2.数组大小固定,不能拓展:链表大小不固定,可以拓展 3.数组查询方便,插入删除不方便:数组查询不方便,插入删除方便

  6. java 二维链表_Java数据结构与算法----数组与链表

    数据类型 1 数据类型介绍 数据类型的分类(按照结构划分):线性结构和非线性结构 线性结构:线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系 线性结构有两种不同的存储结构,即顺序 ...

  7. 牛客网Java刷题知识点之数组、链表、哈希表、 红黑二叉树

    不多说,直接上干货! 首先来说一个非常形象的例子,来说明下数组和链表. 上体育课的时候,老师说:你们站一队,每个人记住自己是第几个,我喊到几,那个人就举手,这就是数组. 老师说,你们每个人记住自己前面 ...

  8. java的数组和链表从熟系到陌生

    数组和链表 java的数组是什么:数组是用来存放同一种数据类型的集合, 数组中每个元素都是相通的数据类型,数组就是在内存中划分一串连续的空间(数组作为对象允许使用new关键字进行内存分配),注意只能存 ...

  9. JAVA 基本数据结构--数组、链表、ArrayList、Linkedlist、hashmap、hashtab等

    概要 线性表是一种线性结构,它是具有相同类型的n(n≥0)个数据元素组成的有限序列.本章先介绍线性表的几个基本组成部分:数组.单向链表.双向链表:随后给出双向链表的C.C++和Java三种语言的实现. ...

最新文章

  1. 高效读CV论文法则:先在GitHub上立Flag!| 资源
  2. 【虚拟机】苹果虚拟机mac10.11.6+Xcode8.1
  3. shell脚本中使用seq生成连续整数
  4. php 回复id同过session 任意获取id不通过a,PHP会话ID相同但变量丢失
  5. 时间序列分析模型:ARIMA模型和SARIMAX算法
  6. c语言指针++_C ++此指针| 查找输出程序| 套装3
  7. linux下caffe-gpu的编译安装
  8. Android中发现java代码设置的字体过大
  9. WPF实现DoEvents
  10. HTN规划 jshop2
  11. 瑞吉外卖项目——瑞吉外卖
  12. 养龟者,养心也(浅析巴西龟的饲养方法)
  13. Linux 系统裁剪笔记 软盘2
  14. 无内鬼,爬B站视频来一波
  15. 编写一个程序重复提示用户输入一个国家的首都,一旦收到用户的输入,程序报告用户输入的答案是否正确,假设将50个国家的首都存放在一个字典中,程序提示用户回答所有国家的首都并且显示回答正确的总个数。
  16. OpenCV 中cv2.threshold详解,(大白话版)
  17. 浩辰CAD看图王中如何一键替换CAD图纸中大量相同的文字?
  18. arduino - pinMode参数1的确定 - 以arduino nano every核心板为例
  19. bat文件·启动程序打开文件夹
  20. 塔望·食业研究丨方便速食行业市场主要竞争品牌分析及研究

热门文章

  1. python用vim做ide的语法检查
  2. 滚动歌词制作 之 ncm格式转mp3
  3. 几十场群面经验后,我发现了这个技巧
  4. 00QT知识点学习大纲
  5. 八叉树 java_图像八叉树量化讲解 Java版本
  6. 系统学习WebAssembly —— 理论篇
  7. Web应用程序安全性测试指南
  8. 爱陆通水库大坝安全监测系统,北斗三号5G遥测终端机,5G水利RTU
  9. python中shutil.copyfile的用法_python模块之shutil
  10. Python 中 shutil 的使用