Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 数组是JS中唯一的0(1)数据结构吗?如果是这样的话,为什么顶级答案会提出相反的要求?_Javascript_Node.js_Hashtable - Fatal编程技术网

Javascript 数组是JS中唯一的0(1)数据结构吗?如果是这样的话,为什么顶级答案会提出相反的要求?

Javascript 数组是JS中唯一的0(1)数据结构吗?如果是这样的话,为什么顶级答案会提出相反的要求?,javascript,node.js,hashtable,Javascript,Node.js,Hashtable,假设您使用的是JavaScript中的大型关系数据结构,需要经常快速地访问信息。在JS中的幕后使用应该能够以O(1)的效率访问大型数据结构。但我下面的代码示例将演示,对于普通对象,它不接近0(1)。但是,在讨论数组(以及对象)的效率时,声称数组应该利用哈希表执行“与常规对象值一样”: 与大多数实现数组的语言不同, 数组,在Javascript中数组是对象,值存储在 哈希表,就像常规对象值一样。因此: 通道-O(1) 追加-摊销O(1)(有时需要调整哈希表的大小;通常只需要插入) 通过unshi

假设您使用的是JavaScript中的大型关系数据结构,需要经常快速地访问信息。在JS中的幕后使用应该能够以O(1)的效率访问大型数据结构。但我下面的代码示例将演示,对于普通对象,它不接近0(1)。但是,在讨论数组(以及对象)的效率时,声称数组应该利用哈希表执行“与常规对象值一样”:

与大多数实现数组的语言不同, 数组,在Javascript中数组是对象,值存储在 哈希表,就像常规对象值一样。因此:

  • 通道-O(1)
  • 追加-摊销O(1)(有时需要调整哈希表的大小;通常只需要插入)
  • 通过
    unshift
    预结束-O(n),因为它需要重新分配所有索引
  • 插入-如果该值不存在,则摊销O(1)。O(n)如果要移动现有值(例如,使用
    拼接
  • 删除-摊销O(1)以删除值,如果要通过
    拼接重新分配索引,则为O(n)
  • 交换-O(1)
一些简单的测试表明,使用V8的JavaScript中的对象和映射都只提供O(n)或更差的性能,有时映射较弱,但并不总是提供O(1):

每次运行该图表时,它的外观都会明显不同,但保持一致的一点是,在这四种数据结构中,数组是唯一保持O(1)访问效率一致的JavaScript数据结构。即使是弱贴图也不能始终提供0(1)

let count;
让我们开始;
让我们结束;
允许访问;
让计数=[];
//物体速度测试
设objData=[];
设obj={}
计数=0;
//不要将其升高到i<5以上,循环将挂起
对于(设i=0,j=100;i<5;i++,j*=10){
如果(i==1)j-=100;
for(设k=0;k

保证

无法保证数组和对象的查找时间。可能是O(1),可能更糟,具体取决于实现。地图查找时间平均要优于O(n):

映射对象必须使用哈希表或其他机制实现,这些机制平均提供的访问时间与集合中的元素数呈次线性关系<