原文链接: js 数组 堆栈 和 buckets 效率 对比
上一篇: vue 算法可视化 汉诺塔加强版
下一篇: mnist 转换为record 使用tf data 转换 读取 训练
shift() 方法用于把数组的第一个元素从其中删除,并返回第一个元素的值。
arrayObject.shift()
数组原来的第一个元素的值。
如果数组是空的,那么 shift() 方法将不进行任何操作,返回 undefined 值。请注意,该方法不创建新数组,而是直接修改原有的 arrayObject。
注释:该方法会改变数组的长度。
提示:要删除并返回数组的最后一个元素,请使用 pop() 方法。
尾部删除和头部删除的效率差别很大,在数组的长度比较长时很显著!!!!所以如果使用数组模拟堆栈的话,小数据量可以随便玩,大数据量的话还是使用专用库吧
比如
https://github.com/mauriciosantos/Buckets-JS
测试代码
var buckets = require('buckets-js');
let size = 100000
let test_size = 10000
a = Array.from(Array(size)).map((v, i) => i)
console.log(a.length)
st = new Date().getTime()
for (let i = 0; i < test_size; i++)
a.shift()
ed = new Date().getTime()
console.log('js queue', a.length, ed - st)
a = Array.from(Array(size)).map((v, i) => i)
st = new Date().getTime()
for (let i = 0; i < test_size; i++)
a.pop()
ed = new Date().getTime()
console.log('js stack ', a.length, ed - st)
q = buckets.Queue()
a = Array.from(Array(size)).map((v, i) => q.enqueue(i))
st = new Date().getTime()
for (let i = 0; i < test_size; i++)
q.dequeue()
ed = new Date().getTime()
console.log('bucket queue', q.size(), ed - st)
q = buckets.Stack()
a = Array.from(Array(size)).map((v, i) => q.push(i))
st = new Date().getTime()
for (let i = 0; i < test_size; i++)
q.pop()
ed = new Date().getTime()
console.log('bucket queue', q.size(), ed - st)
测试结果,可以看到buckets的效率还是很不错的
let size = 100000
let test_size = 10000
100000
js queue 90000 431
js stack 90000 2
bucket queue 90000 3
bucket queue 90000 3
let size = 1000000
let test_size = 1000
1000000
js queue 999000 1218
js stack 999000 0
bucket queue 999000 1
bucket queue 999000 0