集合
由一个或多个确定的元素所构成的整体
首先,集合里的元素类型不一定相同。 你可以将商品看作一个集合,也可以将整个商店看作一个集合,这个商店中有人或者其他物品也没有关系。
其次,集合里的元素没有顺序。 我们不会这样讲:我想要集合中的第三个元素,因为集合是没有顺序的。
事实上,这样的集合并不直接存在于编程语言中。然而,实际编程语言中的很多数据结构,就是在集合的基础上添加了一些规则形成的。
列表
是一种数据项构成的有限序列,即按照一定的线性顺序,排列而成的数据项的集合。
在编程语言中,列表最常见的表现形式有数组和链表,而我们熟悉的栈和队列则是两种特殊类型的列表。除此之外,向列表中添加、删除元素的具体实现方式会根据编程语言的不同而有所区分。
数组
数组是列表的实现方式之一
列表是没有索引的,而数组是有的,其次,数组中的元素在内存中是连续存储的,且每个元素占用相同大小的内存,相反,列表中的元素在内存中可能彼此相邻,也可能不相邻。比如列表的另一种实现方式——链表,它的元素在内存中则不一定是连续的
为什么React使用的单向链表而不是数组呢?
链表和数组的区别:数组的存储空间是静态的,数组是连续存储,链表并不是连续,链表的节点与节点之间通过指针来联系,链表也有不同的形态,主要分为三种:单向链表、双向链表、循环链表
单向链表
单向链表的节点通常由两个部分构成,一个是节点储存的值val
,另一个就是节点的指针next
.
由于链表和数组的特性不同,导致不同的操作,复杂度也不一样
- 查找
数组:可以按下标索引来访问,速度快
单向链表:
从头节点进入,开始比对节点的值,如果不同则通过指针进入下一个节点
重复上面的动作,直到找到相同的值,或者节点的指针指向null
- 插入删除性能
链表与数组最大的不同就在于删除、插入的性能优势,由于链表是非连续的内存,所以不用像数组一样在插入、删除操作的时候需要进行大面积的成员位移,链表只需要移动一下指针即可,而且链表由于指针的存在可以形成环形链表,在特定场景也非常有用