【发布时间】:2015-04-04 11:25:40
【问题描述】:
来自 Java,Javascript 对象让我想起了 Java 中的 HashMap。
Javascript:
var myObject = {
firstName: "Foo",
lastName: "Bar",
email: "foo@bar.com"
};
Java:
HashMap<String, String> myHashMap = new HashMap<String, String>();
myHashMap.put("firstName", "Foo");
myHashMap.put("lastName", "Bar");
myHashMap.put("email", "foo@bar.com");
在 Java HashMap 中,它使用 key 的 hashcode() 函数来确定存储和检索的存储桶位置(条目)。在大多数情况下,对于 put() 和 get() 等基本操作,性能是恒定的,直到发生哈希冲突,对于这些基本操作而言这变成 O(n),因为它形成了一个链表来存储冲突的条目。
我的问题是:
- Javascript 是如何存储对象的?
- 运营绩效如何?
- 是否会出现任何冲突或其他会降低性能的情况,如 Java 中
谢谢!
【问题讨论】:
-
看看这个链接,它有一些关于你的问题的好信息:github.com/benblack86/java-snippets/blob/master/resources/…
-
@EvanBechtol 那篇论文是关于 Java 的,而这个问题是关于 JavaScript 性能的。
-
对象存储依赖于实现。也就是说,这个问题可以针对 v8 和 spidermonkey 来回答,但这些都是很长的答案。
-
这个问题在 Java 标签下。不管怎样,这对 JS 来说是一个很好的资源 javascript.crockford.com/survey.html stackoverflow.com/questions/7374171/…
-
好问题!不幸的是,答案取决于实现。基本上,所有的 js 对象处理都是 O(1)。 v8(Chrome 的引擎)首先为您的对象创建一个结构,从而为您提供最快的访问。一旦超过键计数,它就会退回到基本的哈希表模式。更多关于 here.
标签: javascript performance big-o