2021年2月23日(数组,列表,集合)


集合

由一个或多个确定的元素所构成的整体

首先,集合里的元素类型不一定相同。 你可以将商品看作一个集合,也可以将整个商店看作一个集合,这个商店中有人或者其他物品也没有关系。

其次,集合里的元素没有顺序。 我们不会这样讲:我想要集合中的第三个元素,因为集合是没有顺序的。

事实上,这样的集合并不直接存在于编程语言中。然而,实际编程语言中的很多数据结构,就是在集合的基础上添加了一些规则形成的。

列表

是一种数据项构成的有限序列,即按照一定的线性顺序,排列而成的数据项的集合。

在编程语言中,列表最常见的表现形式有数组和链表,而我们熟悉的栈和队列则是两种特殊类型的列表。除此之外,向列表中添加、删除元素的具体实现方式会根据编程语言的不同而有所区分。

数组

数组是列表的实现方式之一

列表是没有索引的,而数组是有的,其次,数组中的元素在内存中是连续存储的,且每个元素占用相同大小的内存,相反,列表中的元素在内存中可能彼此相邻,也可能不相邻。比如列表的另一种实现方式——链表,它的元素在内存中则不一定是连续的

为什么React使用的单向链表而不是数组呢?

链表和数组的区别:数组的存储空间是静态的,数组是连续存储,链表并不是连续,链表的节点与节点之间通过指针来联系,链表也有不同的形态,主要分为三种:单向链表、双向链表、循环链表

链表vs数组
单向链表

单向链表的节点通常由两个部分构成,一个是节点储存的值val,另一个就是节点的指针next.

单向链表

由于链表和数组的特性不同,导致不同的操作,复杂度也不一样

  1. 查找

数组:可以按下标索引来访问,速度快

单向链表:

  • 从头节点进入,开始比对节点的值,如果不同则通过指针进入下一个节点

  • 重复上面的动作,直到找到相同的值,或者节点的指针指向null

  1. 插入删除性能

链表与数组最大的不同就在于删除、插入的性能优势,由于链表是非连续的内存,所以不用像数组一样在插入、删除操作的时候需要进行大面积的成员位移,链表只需要移动一下指针即可,而且链表由于指针的存在可以形成环形链表,在特定场景也非常有用

双向链表
双向链表

Author: wxy
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source wxy !
  TOC