gpt4 book ai didi

javascript - 当用作哈希时,JavaScript 数组的大 O 是什么?

转载 作者:可可西里 更新时间:2023-11-01 01:40:00 25 4
gpt4 key购买 nike

当用作散列时,JavaScript 的数组访问的大 O 是什么?

例如,

var x= [];
for(var i=0; i<100000; i++){
x[i.toString()+'a'] = 123; // using string to illustrate x[alpha]
}
alert(x['9999a']); // linear search?

可以希望 JS 引擎不会在内部使用线性搜索 O(n),但这是肯定的吗?

最佳答案

在语法上假定在 JavaScript 中访问对象属性和数组元素是在 constant time 中完成的:O(1)。 ECMAScript 规范不保证性能特征,但所有现代 JavaScript 引擎都在恒定时间内检索对象属性。

这是一个简单的示例,展示了当容器大 1000 倍时访问时间如何增长:

var largeObject = {};
var smallObject = {};

var x, i;

for (i = 0; i < 1000000; i++) {
largeObject['a' + i] = i;
}

for (i = 0; i < 1000; i++) {
smallObject['b' + i] = i;
}

console.time('10k Accesses from largeObject');
for (i = 0; i < 10000; i++) x = largeObject['a' + (i % 1000000)];
console.timeEnd('10k Accesses from largeObject');

console.time('10k Accesses from smallObject');
for (i = 0; i < 10000; i++) x = largeObject['a' + (i % 1000)];
console.timeEnd('10k Accesses from smallObject');

Firebug、Firefox 3.6.10(Mac OS X 10.6.4 - 2.93Ghz Intel Core 2 Duo)的结果:

10k Accesses from largeObject: 22ms
10k Accesses from smallObject: 19ms

Chrome 开发工具 6.0.472 中的结果:

10k Accesses from largeObject: 15ms
10k Accesses from smallObject: 15ms

Windows 7 上带有 Firebug Lite 的 Internet Explorer 8.0.7600

10k Accesses from largeObject: 250ms
10k Accesses from smallObject: 219ms

关于javascript - 当用作哈希时,JavaScript 数组的大 O 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3858411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com