@@ -29,20 +29,21 @@ object = %x7B ws [ member *( ws %x2C ws member ) ] ws %x7D
29
29
* 动态数组(dynamic array):可扩展容量的数组,如 C++ 的 [ ` std::vector ` ] ( http://en.cppreference.com/w/cpp/container/vector ) 。
30
30
* 有序动态数组(sorted dynamic array):和动态数组相同,但保证元素已排序,可用二分搜寻查询成员。
31
31
* 平衡树(balanced tree):平衡二叉树可有序地遍历成员,如红黑树和 C++ 的 [ ` std::map ` ] ( http://en.cppreference.com/w/cpp/container/map ) ([ ` std::multi_map ` ] ( http://en.cppreference.com/w/cpp/container/multimap ) 支持重复键)。
32
- * 哈希表(hash table):通过哈希函数能实现 O(1) 查询,如 C++11 的 [ ` std::unordered_map ` ] ( http://en.cppreference.com/w/cpp/container/unordered_map ) (` http://en.cppreference.com/w/cpp/container/unordered_multimap ` (http://en.cppreference.com/w/cpp/container/unordered_multimap ) 支持重复键)。
32
+ * 哈希表(hash table):通过哈希函数能实现平均 O(1) 查询,如 C++11 的 [ ` std::unordered_map ` ] ( http://en.cppreference.com/w/cpp/container/unordered_map ) (` http://en.cppreference.com/w/cpp/container/unordered_multimap ` (http://en.cppreference.com/w/cpp/container/unordered_multimap ) 支持重复键)。
33
33
34
34
设一个对象有 n 个成员,数据结构的容量是 m,n ⩽ m,那么一些常用操作的时间/空间复杂度如下:
35
35
36
- | | 动态数组 | 有序动态数组| 平衡树 | 哈希表 |
37
- | ---------------| :-------:| :----------:| :------------:| :-------:|
38
- | 自定成员次序 | 可 | 否 | 否 | 否 |
39
- | 初始化 n 个成员| O(n) | O(n log n) | O(n log n) | O(n) |
40
- | 加入成员 | 分摊 O(1)| O(n) | 分摊 O(log n) | 分摊 O(1)|
41
- | 移除成员 | O(n) | O(n) | 分摊 O(log n) | 分摊 O(1)|
42
- | 查询成员 | O(n) | O(log n) | O(log n) | O(1) |
43
- | 遍历成员 | O(n) | O(n) | O(n) | O(m) |
44
- | 检测对象相等 | O(n^2) | O(n) | O(n) | O(m) |
45
- | 空间 | O(m) | O(m) | O(n) | O(m) |
36
+ | | 动态数组 | 有序动态数组| 平衡树 | 哈希表 |
37
+ | ---------------| :-------:| :----------:| :--------:| :--------------------:|
38
+ | 有序 | 否 | 是 | 是 | 否 |
39
+ | 自定成员次序 | 可 | 否 | 否 | 否 |
40
+ | 初始化 n 个成员| O(n) | O(n log n) | O(n log n)| 平均 O(n)、最坏 O(n^2)|
41
+ | 加入成员 | 分摊 O(1)| O(n) | O(log n) | 平均 O(1)、最坏 O(n) |
42
+ | 移除成员 | O(n) | O(n) | O(log n) | 平均 O(1)、最坏 O(n) |
43
+ | 查询成员 | O(n) | O(log n) | O(log n) | 平均 O(1)、最坏 O(n) |
44
+ | 遍历成员 | O(n) | O(n) | O(n) | O(m) |
45
+ | 检测对象相等 | O(n^2) | O(n) | O(n) | 平均 O(n)、最坏 O(n^2)|
46
+ | 空间 | O(m) | O(m) | O(n) | O(m) |
46
47
47
48
在 ECMA-404 标准中,并没有规定对象中每个成员的键一定要唯一的,也没有规定是否需要维持成员的次序。
48
49
0 commit comments