@@ -29,20 +29,21 @@ object = %x7B ws [ member *( ws %x2C ws member ) ] ws %x7D
2929* 动态数组(dynamic array):可扩展容量的数组,如 C++ 的 [ ` std::vector ` ] ( http://en.cppreference.com/w/cpp/container/vector ) 。
3030* 有序动态数组(sorted dynamic array):和动态数组相同,但保证元素已排序,可用二分搜寻查询成员。
3131* 平衡树(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 ) 支持重复键)。
3333
3434设一个对象有 n 个成员,数据结构的容量是 m,n ⩽ m,那么一些常用操作的时间/空间复杂度如下:
3535
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) |
4647
4748在 ECMA-404 标准中,并没有规定对象中每个成员的键一定要唯一的,也没有规定是否需要维持成员的次序。
4849
0 commit comments