数据结构之Array

2017-10-30 · xiejiahe

数据结构是什么?

数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。

var arr = []

[]声明式数组, 也是很多人推荐的声明

new Array

new出来一个实例化对象,他需要分配内存

Array.of

Array.of是ES6的语法,其出现是为了弥补new Array的不足


分别对3种进行循环1000万次看看性能如何

test []

console.time('[]');
var arr = [];
for (var index = 0; index < 10000000; index++) {
    arr.push[index]
}
console.timeEnd('[]');

分别取出三次值

[]: 137.045166015625ms
[]: 149.779296875ms
[]: 168.26806640625ms

test new Array

console.time('new Array');
var arr1 = new Array(10000000);
for (var j = 0; j < 10000000; j++) {
    arr1[j] = j;
}
console.timeEnd('new Array');

分别取出三次值

new Array: 74.40380859375ms
new Array: 85.832275390625ms
new Array: 80.958251953125ms

test Array.of

console.time('Array.of');
var arr2 = Array.of();
for (var k = 0; k < 10000000; k++) {
    arr2.push(k);
}
console.timeEnd('Array.of');

分别取出三次值

Array.of: 438.76416015625ms
Array.of: 446.82177734375ms
Array.of: 393.240966796875ms

完整测试代码

<script>

function arr () {
    console.time('[]');
    var arr = [];
    for (var index = 0; index < 10000000; index++) {
        arr.push[index]
    }
    console.timeEnd('[]');

    console.time('new Array');
    var arr1 = new Array(10000000);
    for (var j = 0; j < 10000000; j++) {
        arr1[j] = j;
    }
    console.timeEnd('new Array');

    console.time('Array.of');
    var arr2 = Array.of();
    for (var k = 0; k < 10000000; k++) {
        arr2.push(k);
    }
    console.timeEnd('Array.of');
}
arr();

</script>

分别输出3次

// 第一次
[]: 149.431884765625ms
new Array: 81.44482421875ms
Array.of: 407.18115234375ms

// 第二次
[]: 151.85498046875ms
new Array: 83.663818359375ms
Array.of: 439.60693359375ms

// 第三次
[]: 153.926025390625ms
new Array: 81.570068359375ms
Array.of: 383.362060546875ms

从上面的结果可以看到new Array速度是最快然后到[]其次Array.of, 为什么?

  1. new Array他已经将内存分配好了,然后再进行赋值所以会快很多。
  2. [] 当内存不够大的时候他会扩充导致这部分消耗了更多的时间。
  3. Array.of 最慢,其实跟[]是差不多,他底层需要做更多东西。

总结:怎么使用还是要看需求,一般的话使用[]进行声明数组,因为这样不会浪费内存,如果事先知道需要多大的数组使用new Array会更好,但是因为new Array声明数组有时候会出现一些奇葩问题。

看似差距没那么大,当你发现问题的时候才会知道他的用处。

JavaScript
原创文章,转载请注明出处。