当前位置: 首页 > 知识库问答 >
问题:

es6映射和设置复杂性,v8实现

荆梓
2023-03-14

在v8实现中,检索/查找是O(1),这是一个公平的假设吗?

(我知道标准并不能保证这一点)

共有3个答案

扈俊健
2023-03-14
let map = new Map();
let obj = {};

const benchMarkMapSet = size => {
console.time("benchMarkMapSet");
for (let i = 0; i < size; i++) {
    map.set(i, i);
}
console.timeEnd("benchMarkMapSet");
};

const benchMarkMapGet = size => {
console.time("benchMarkMapGet");
for (let i = 0; i < size; i++) {
    let x = map.get(i);
}
console.timeEnd("benchMarkMapGet");
};

const benchMarkObjSet = size => {
console.time("benchMarkObjSet");
for (let i = 0; i < size; i++) {
    obj[i] = i;
}
console.timeEnd("benchMarkObjSet");
};

const benchMarkObjGet = size => {
console.time("benchMarkObjGet");
for (let i = 0; i < size; i++) {
    let x = obj[i];
}
console.timeEnd("benchMarkObjGet");
};

let size = 2e6;

benchMarkMapSet(size);
benchMarkObjSet(size);
benchMarkMapGet(size);
benchMarkObjGet(size);

基准MarkMapSet: 382.935ms基准MarkObjSet: 76.077ms基准MarkMapget: 125.478ms基准MarkObjget: 2.764ms

benchMarkMapSet:373.172ms benchMarkObjSet:77.192ms benchMarkMapGet:123.035ms benchMarkObjGet:2.638ms

杜嘉木
2023-03-14

因为人们不想把兔子洞挖得太深:

1:我们可以假设好的哈希表实现实际上有O(1)时间复杂度。
2:这是V8团队发布的一篇博客,解释了如何在其哈希表实现上为MapSet进行内存优化优化哈希表:隐藏哈希代码

基于1和2:V8的设置和地图的get

孙鑫鹏
2023-03-14

在v8实现中,检索/查找是O(1),这是一个公平的假设吗?

是的。V8使用的散列表变体通常具有这些操作的O(1)复杂性。

有关详细信息,您可能需要查看https://codereview.chromium.org/220293002/ 其中,OrderedHashTable是基于https://wiki.mozilla.org/User:Jorend/Deterministic_hash_tables.

 类似资料:
  • 问题内容: 是否公平地假设在v8实现中,检索/查找为O(1)? (我知道标准并不能保证这一点) 问题答案: 是否公平地假设在v8实现中,检索/查找为O(1)? 是。V8使用哈希表的变体,这些哈希表通常对这些操作具有复杂性。

  • 本章展示了一些较为复杂的关系映射。

  • 主要内容:1.Map属性,2.Map方法,3.弱映射,4.for…of循环和弱映射,5.迭代器和映射ES6的一系列新功能都被添加到JavaScript中。 在ES6之前,当需要键和值的映射时,一般是使用一个对象。 这是因为该对象可以将键映射到任何类型的值。 ES6提供了一种称为Map的新集合类型,其中包含键-值对,其中任何类型的值都可以用作键或值。 对象始终记住键的实际插入顺序。 对象中的键和值可以是原语或对象。 它返回新的或空的。 映射是有序的,因此它们按其插入顺序遍历元素。 语法 使用以下语

  • 更复杂的关联连接极为罕见。通过在映射文档中嵌入 SQL 片断,Hibernate 也可以处理更为复杂的情况。比如,假若包含历史帐户数据的表定义了 accountNumber、effectiveEndDate 和 effectiveStartDate 字段,按照下面映射: <properties name="currentAccountKey"> <property name="accou

  • 我有2个POJO,如下所示: 现在上面的映射将name等字段从SourceObj复制到DestObj,但无法将List of Address从src包映射到List of Address包。地址对象中还有一个联系人对象列表。 我找到的一个解决方案是编写一个自定义转换器,它将逐个复制基本字段值,然后将所有对象从一个列表复制到另一个目标列表。 但我正在寻找推土机配置的解决方案。xml。 在上述xml映

  • 在V7必应地图中,您提供了在下面链接的集群地图中添加图钉和infobox的功能 https://www.bingmapsportal.com/isdk/ajaxv7#loadingdynamicmodule3