@@ -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