当前位置:   article > 正文

数组和链表的区别详解_数组和链表的分类依据

数组和链表的分类依据

目录

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是链表实现的,查询效率低,插入和删除效率高,线程不安全


如有错误,烦请指出。


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/676359
推荐阅读
相关标签
  

闽ICP备14008679号