JavaScript Set的内部工作原理
JavaScript Set 是一组不重复的值,即值不能重复出现。这些值可以是原始类型或对象。ES6的Set是有序的,集合的元素可以按插入顺序进行迭代。在本文中,我们将了解Javascript中Set的内部工作原理。
Set的工作原理
集合提供了在集合中元素数量的下线性访问时间。这意味着集合内部存储为哈希表,因此对于搜索的时间复杂度为O(1)。它们有时也以搜索树的形式存储,时间复杂度为O(log(N))。
它使用值的相等性来确定唯一性,根据数据类型来比较值。迭代是可预测的,因为值的插入顺序被保留。Set数据结构简化了在JavaScript应用程序中管理唯一值的操作。
为了测试集合的性能,我们将其与数组的includes()方法进行比较,通常发现它比includes()方法更快。
示例: 以下是JavaScript Set的基本示例。
Javascript
let set1 = new Set([10, 20, 30, 30, 40, 40]);
for (const item of set1) {
console.log(item);
}
输出: 我们可以看到集合中的元素按照定义的顺序存储,值的相等算法在存储数据之前会删除重复项。
Set(4) {10, 20, 30, 40}
示例2: 此示例描述了JavaScript中Set对象的用法。
JavaScript
const setVal = new Set();
for (let i = 0; i < 1000000; i++) {
setVal.add(i);
}
const arr = Array.from(Array(1000000), (_, i) => i);
let include = arr.includes(999999)
console.time('set')
console.log(setVal.has(999999)); // Output: true
console.timeEnd('set')
console.time('Array')
console.log(arr.includes(999999)); // Output: true
console.timeEnd('Array')
输出: 在此示例中,我们将has()方法与数组的includes()方法进行了比较。set的has()方法所花费的时间要少于数组的includes()方法。
true
set: 0.126220703125 ms
true
Array: 0.48388671875 ms
集合的重要性:
- 处理集合: 要处理元素的集合,例如从数组中消除重复项,请使用set函数。你可以通过将数组转换为Set,然后再转换回来,快速去除重复元素。
- 唯一值: 集合主要用于存储独特的值。通过防止重复值,它确保集合中的每个元素都是不同的。对于需要保存一组唯一值的情况,Set非常适合。
- 迭代: Set是可迭代的,这意味着您可以使用for…of循环或使用forEach()等方法轻松循环遍历其元素。这使得在Set中迭代存储的唯一值并对它们执行操作变得方便。
- 数学集合操作: Set支持多种数学集合操作,包括并集、交集和差集。使用add()、remove()和forEach()等方法,您可以快速对Set对象执行类似的操作。
- 内存效率: 与其他方法相比,例如在数组或对象中手动查找重复项,使用Set可以更加高效地使用内存,尤其在您拥有大量数据集并想确保它们的唯一性时。