数组和链表的区别

重新回顾了下,总结如下:

1.数组
查询快:数组要求是一块连续的内存空间来存储,这就要求在物理上这一片空间是连续的,每个元素都有指定的索引index指向内存地址,因此查询对时候,可根据index快速找到对应地址存储的信息,此为查询快.
增删慢:但要进行增删的时候,就必须将目标位置后的所有元素都整体移动,因此就比较耗时,此为增删慢.
2.链表
增删快:链表在物理上是动态地分配储存空间,不要求连续性,但是要求逻辑上的连续。它需要存储每个元素在内存中的地址,以及它相邻元素的地址,然后像链条一样把各元素链起来,保证了在逻辑上的连续性。
比如:
单链表,每个元素除了存储本身的值外,还存储了前驱的引用,也就是存储了前驱所在的内存地址信息。
双链表就是不仅存储了前驱的引用还存储了后继的引用.

增加元素的时候,只需给增加元素添加其前元素或后元素的地址;删除元素的时候,修改目标元素前驱和后驱的首位连接地址. 故此为增删快。

查询慢:由于没有像数组那样的索引,因此,查询的时候需要遍历整个链表所有元素的内存地址,然后才能确定目标元素,此为查询慢。

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

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

与之相反,链表是离散存储的,所以在插入一个数据时只要申请一片新空间,然后将其中的连接关系做一个修改就可以,但是显然在链表上查找一个数据时就要逐个遍历了。
考虑以上的总结可见,数组和链表各有优缺点。在具体使用时要根据具体情况选择。当查找数据操作比较多时最好用数组;当对数据集中的数据进行添加或删除比较多时最好选择链表。`

[Java]浅谈HashMap和ConcurrentHashMap的区别https://blog.csdn.net/singc/article/details/108617334

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 数组和链表是两种基本的数据结构,他们在内存存储上的表现不一样,所以也有各自的特点。 大致总结一下特点和区别,拿几个...
    喵了个呜s阅读 3,825评论 0 1
  • 首先,二者都属于数据结构的范畴。数组一旦初始化,长度就不能改变。链表长度可以改变,可以动态的增加节点数据,操作比较...
    望月成三人阅读 1,766评论 2 4
  • 两者的区别可以从两方面: 内存存储:① 数组从栈中分配空间,对程序员方便快速,自由度小。② 链表从堆中分配内存...
    飞向大海的菜鸟阅读 2,587评论 0 1
  • 我在月台中央 看铁轨扎进群山的脊背 流体的压强未将我吸走 我流着泪 不掩饰 认真地 观望着 渐行渐远 任时光褪...
    薛畅阅读 211评论 0 0
  • 有两位盲人,他们都各自买了两对黑袜和两对白袜,八对袜子的布质、大小完全相同,而每对袜了都有一张商标纸连着。两位盲人...
    博格体阅读 752评论 0 0

友情链接更多精彩内容