JS 中的 Set 类型数据结构是基于散列表 (Hash table) 实现的,它保存了一组不重复的值,插入、删除、查找的时间复杂度均为 O(1)。
散列表是通过将数据元素映射到散列表的某个位置来存储数据的,使用散列函数将数据元素的值映射为一个整数,然后将该整数对散列表的长度取模,将数据元素存储在对应的位置。这样,查找数据元素时,就可以直接通过散列函数计算出该数据元素在散列表中的位置,然后直接访问该位置上的数据元素,从而达到了 O(1) 的查找时间复杂度。
如果有多个数据元素通过散列函数映射到了同一个位置,则会产生冲突,此时可以使用一些技巧,例如开放定址、链地址法等,来解决冲突问题。