数组和链表的区别详解

目录

1、什么是数组和链表

2、数组和链表的区别


1、什么是数组和链表

  • 数组介绍

数组:相同数据类型的元素按照一定的顺序排列的集合

数组本身属于引用数据类型,数组是由下标索引和data两部分组成。

数组数据结构
  • 数组特点

1、在堆内存中,数组是一块连续的区域

2、数组的空间在编译阶段就需要进行确定,所以需要提前给出数组空间的大小(在运行阶段是不允许改变的)

3、数组的插入和删除效率低,插入时,待插入位置的元素和他后面的元素都需要向后移动,删除时,待删除位置的元素和它后面的所有元素都需要向前移动

4、随机访问效率高,因为它的地址是连续的,想要访问哪个元素,只需要首地址向后偏移索引值(数组下标)就能访问到

5、不利于扩展,空间不够时只能重新定义数组,分配内存

6、因为数组本身属于引用类型数据,所以它的空间是从栈进行分配,栈存储引用地址,然后堆上存储数据,见结构图。

  • 链表介绍

链表:链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针连接次序实现。每个链表包含多个节点,节点又由data数据和指向下一个数据的指针地址两部分组成。

链表数据结构
  • 链表特点

1、链表每个节点的内存地址都是分散的,不需要连续

2、查询效率低,时间复杂度是O(n),因为链表的空间分散,所以要找哪个位置的元素,得从第一个节点开始顺序遍历。

3、链表不需要提前指定大小,动态扩展,故空间利用率高

4、任意位置的插入和删除元素效率高,时间复杂度是O(1)

2、数组和链表的区别

比较

数组

链表

查询

O(1)

O(n)

插入、删除

O(n)

O(1)

空间利用率

扩展性

低(数组大小提前定义,若要扩展,得重新定义数组,数据迁移)

高(动态扩展)

运用

Vetor和ArrayList都是数组实现,查询效率高,Vector被Synchronized修饰,线程安全,ArrayList线程不安全

LinkedList是链表实现的,查询效率低,插入和删除效率高,线程不安全


如有错误,烦请指出。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值