Set VS Array
数组(Array)和集合(Set)数据结构类型有很多共同点,下面我们就来看看它们有哪些相似之处、彼此有何不同以及它们的使用情况。
什么是Set和Array?
Set
Set是一种数据类型,可用于存储任何类型的数据,无论是原始数据还是对象的引用。Set将数据存储在具有键的集合中,这些键可以按照插入时的顺序进行迭代。
Array
Array是一种用于在连续内存中存储数据的高级列表式对象。每个数组都有多个单元格,每个单元格都有一个用于访问其数据的数字索引。它是所有数据结构中最基本、最常用的一种。
现在,我们已经知道了它们是什么,让我们来看看它们之间的异同点。
异同点
我们需要了解如何构造或初始化这两个对象。
这两个对象都有一个内置的构造函数,它使用新的语法来声明新的数据结构。不过,与Set
不同,Array
并不局限于这种声明方法。Array
也可以用字面量的方式来声明。
Set类型的初始化方式
const set = new Set();
Array类型的初始化方式
const arr = new Array();
// or
const arr = [];
另外,字面量的方法初始化数组的速度要快得多;从构造上看是如此,从性能上看也是如此。构造函数的方法与前者相比速度较慢,而且容易出现下面这样的错误:
const arr = new Array(20);
arr[0] //outputs: undefined
arr.length //outputs: 10
// 字面量的方式
const arrLtr = [20];
arrLtr[0] //outputs: 20
arrLtr.length //outputs: 1
接下来,继续深入探讨一下Set
和Array
的区别。
Set
和 Array
的相似之处是显而易见的。如果你以前接触过数组(跟谁没有接触过似的),你会很容易注意到它们的一些共同点。 但是,它们之间的差别也是相当大的。
Set
和 Array
之间最大的差别就是:Set 只能包含一个值的一个实例。例如,在一个数组中,一个值为hufei
的字符串可以出现很多次。而在 Set 中,只会存在一个hufei
。如果尝试继续添加hufei
,其实不会发生任何事情。
如果在 Set 中强制添加重复的值,会发生什么情况?
Set 只会选择其中一个重复值,并删除其余的值。 不过,Set 对重复数据值的不容忍也有它的好处,尤其是在你不希望数据结构中出现重复值或数据泄露的情况下。
Set 和 Array 的大部分相似之处在于它们的操作方式;它们如何用数据或其他方式填充数据。
Array:有多种方法可以插入或移除值,例如push()
、pop()
、unshift()
、shift()
和splice()
。
Set:只有一个方法add()
用于添加元素,delete()
用于移除元素。
使用Set还是Array?
可以从两个角度入手:元素唯一性和性能。
- 当需要在数据结构中使用唯一元素时,应当使用
Set
。虽然数据经过修改后,也能做到这一点,但是Set针对这个点进行了优化; - 如果需要高性能的元素查找,应当使用Set的
hast()
方法; - 如果想比较直接地访问元素、交换元素或者二分查找,应当使用数组;
- 如果要想防止数据产生内存泄漏,应当使用Set;
- 如果想要更多灵活和更多的功能,应当使用数组;
总结
相比Set,数组具有更好的灵活性,像一把瑞士军刀;而在特定领域,Set具有更高的性能和自动去重的能力。 明确了以上几点,就可以根据自己的需求,有选择性的选择应该使用Set或者Array了~~
拜拜~