哈希表
一般来说,哈希表都是用来快速判断一个元素是否出现集合里。哈希法牺牲了空间换取了时间。
例如要查询一个元素是否在某个数组里。要枚举的话时间复杂度是O(n),但如果使用哈希表的话,只需要**O(1)**就可以做到。
哈希法解决问题,可以选择两种数据结构:
- Set(集合)
- Map(映射)
Set
Set 是 ES6 中新增的一种数据类型,用于存储一组不重复、无序的数据。
js
const set = new Set();
js
set.add(4);
set.delete(1);
set.has(1); // false
set.has(2); // true
set.keys(); // SetIterator {2, 3, 4}
set.values(); // Set(3) {2, 3, 4}
set.size;
set.clear();
遍历
for...of
js
for (const item of set) {
console.log(item);
}
forEach()
js
set.forEach(function (item) {
console.log(item);
});
不重复
js
const set = new Set();
set.add(1);
set.add(1);
set.add('1');
set.values(); // SetIterator {1, '1'}
Map
Map 是 ES6 中新增的一种数据类型,用于存储键值对。
js
const map = new Map();
js
const map = new Map([
['key1', 'value1'],
['key2', 'value2'],
]);
js
map.set('key3', 'value3');
map.delete('key1');
map.has('key1'); // false
map.has('key3'); // true
map.get('key3'); // 'value3'
map.keys(); // MapIterator {'key2', 'key3'}
map.values(); // MapIterator {'value2', 'value3'}
map.size;
map.clear();
遍历
for...of
js
for (const [key, value] of map) {
console.log(key, value);
}
forEach()
js
map.forEach(function (value, key) {
console.log(key, value);
});
有序
Map 中的键值是有序的,Map 会记住键的原始插入顺序。
js
const map = new Map();
map.set(1, 1);
map.set(2, 2);
map.set(1, 1);
for (const [key, value] of map) {
console.log(key, value);
}
// 1, 1
// 2, 2