稀疏数组

  稀疏数组就是包含从0开始的不连续索引的数组。通常,数组的length属性值代表数组中元素的个数。如果数组是稀疏的,length属性值大于元素的个数。可以用Array()构造函数或简单地指定数组的索引值大于当前数组长度来创建稀疏数组。

  a = new Array(5);  //数组没有元素,但是a.length是5

  a = [];       //创建一个空数组,length = 0;

  a[1000] = 0;    //赋值添加一个元素,但是设置length为1001

  也可以用delete操作符来生产稀疏数组。

  

  足够稀疏的数组通常上在实现上比稠密的数组更慢、内存利用率更高,这样的数组中查找元素的时间与常规对象属性的查找时间一样长。

  

  注意,当在数组直接量中省略值时不会创建稀疏数组。省略的元素在数组中是存在的,其值为undefined。这和数组元素根本不存在石油一些微妙地其区别的。可以用in操作符检测两者之间的区别:

    var a1 = [,,,];        //数组是[undefined,undefined.undefined]

    var a2 = new Array(3);    //该数组根本没有元素

    0 in a1           //true:a1在索引0处有一个元素

    0 in a2           //false:a2在索引0处没有元素

  当使用for/in循环时,a1和a2之间的区别也很明显

  需要注意的是,当省略数组直接量中的值时(使用连续的逗号,比如[1,,3],这时所得到的数组也是稀疏数组,省略掉的值是不存在的:

    var a1 = [,];         //此数组没有元素,长度是1

    var a2 = [undefined];    //此数组包含一个值为undefined的元素

    0 in a1           //false: a1在索引0处没有元素

    0 in a2           //true:a2在索引0处有一个值为undefined的元素

  了解稀疏数组是了解JavaScript数组的真实本质的一部分。尽管如此,实际上你所碰到的绝大多数JavaScript数组不是稀疏数组。并且,如果你确实碰到了稀疏数组,你的代码很可能像对待非稀疏数组一样来对待他们,只不过它们包含一些undefined值。

时间: 2024-10-11 03:36:34

稀疏数组的相关文章

Android 性能优化之稀疏数组SparseArray<E>

SparseArray<E> 就是对数组的压缩,用一种压缩方式来表示数组. 在我们定义数组的时候 ,数组中 有时候会有大部分内容 未被使用(或为0),造成内存控件的浪费.为了节省内存控件,且不影响数组中原有的数据,我们就采用了一种压缩方式来表示数组.   图中黄色显示的是我们使用了的元素,这里其他 元素都被浪费了 .来看看 用 稀疏 数组 表示的 方法 稀疏数组的 第一部分 表示了 数组的行数 .列数.以及元素使用的个数.第二部分 记录了 使用了的 元素在 原数组中的 位置 及 内容 . Sp

javascript中的稀疏数组(sparse array)和密集数组

学习underscore.js数组相关API的时候,遇到了sparse array这个东西,以前没有接触过. 这里学习下什么是稀疏数组和密集数组. 什么是密集数组呢?在java和C语言中,数组是一片连续的存储空间,有着固定的长度.加入数组其实位置是address,长度为n,那么占用的存储空间是address[0],address[1],address[2].......address[n-1].即数组元素之间是紧密相连的,不存在空隙.如下的js代码创建的就是一个密集数组 var data = [

08.18 javascript 06 数组 数组的概念 创建数组 读取数组中的元素 稀疏数组 添加和删除数组的元素 数组遍历 多维数组 数组的方法 类数组对象 作为数组的字符串

# 数组 ### 数组的概念 * 数组是值的有序集合 * 数组中的每个值 称之为 元素 * 每个元素可以是任意数据类型的值 * 每个元素都有索引(下标) * 元素的索引从0开始,按照顺序递增. 元素最大的索引 2^32-2 ### 创建数组 * 直接量 `[]` * 构造函方式  `new Array()` ### 读写数组中的元素 * 数组名[索引] ### 稀疏数组 * js数组的索引是连续的 * 没有连续的给元素赋值 , 没有赋值的元素会自动赋值 undefined ### 添加和删除 数

理解JS里的稀疏数组与密集数组

一般来说,JavaScript中的数组是稀疏的. 什么是稀疏呢?稀疏也就是说,数组中的元素之间可以有空隙,因为一个数组其实就是一个键值映射.本文解释了如何创建稀疏数组和不稀疏的数组. 1.稀疏数组 创建一个指定长度的稀疏数组很简单: 当你遍历它时,你会发现,它并没有元素,JavaScript会跳过这些缝隙. 还有一些其他情况会生成稀疏数组,比如:,数组元素实际只有2个,但是长度确实101. 2.密集数组 1.创建密集数组的技巧:var a = Array.apply(null, Array(3)

二维数组与稀疏数组的相互转化

package struct; public class SparseArr { public static void main(String[] args) { int chess[][] = new int[11][11]; //0代表空白,1代表黑子,2代表蓝子 chess[1][2] = 1; chess[2][3] = 2; int sum = 0; //获取有效值个数 for (int[] rows : chess) { for (int data : rows) { System.

稀疏数组与环形数组

数据结构与算法的关系 数据结构(data structure)是一门研究组织数据方式的学科,有了编程语言也就有了数据结构.学好数据结构可以编写出跟家漂亮,更加有效率的代码 要学好数据结构就要多多考虑如何将生活中遇到的问题,用程序去实现解决 程序=数据结构+算法 数据结构是算法的基础,换言之,想要学好算法,需要把数据结构学到位 数据结构包括:线性结构和非线性结构 线性结构: 线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系(a[0]=30) 线性结构有两种不同的存储结构,即顺

数据结构与算法—稀疏数组和队列

目录 稀疏数组和队列 1.稀疏数组 1.1 解决方法 1.2 代码实现 2. 队列 2.1 数组模拟队列 2.2 数组模拟环形队列 稀疏数组和队列 1.稀疏数组 所谓稀疏数组就是当数组中大部分的内容值都未被使用(或都为零),在数组中仅有少部分的空间使用.因此造成内存空间的浪费,为了节省内存空间,并且不影响数组中原有的内容值,我们可以使用稀疏数组去压缩数据.OK,如果你不明白,那我们来看一个例子. ? 在一个五子棋中,有存盘和续上盘的功能 分析问题:因为该二维数组的很多默认值是 0,因此记录了很多

JAVA描述算法和数据结构(01):稀疏数组和二维数组转换

一.基本简介 1.基础概念 在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵:与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵.定义非零元素的总数比上矩阵所有元素的总数为矩阵的稠密度. 2.处理方式 1).记录数组一共有几行几列,有多少个不同的值 2).把具有不同值的元素的行列及值记录在稀疏数组中,可以缩小程序代码的复杂度. 3.图解描述 稀疏数组表示 [0] 3 4 4 二维数组,3行,4列,4个非0的值: [1] 1 2 2 一行

数据结构之二维数组与稀疏数组的转换

1.二维数组 二维数据其实就是高数中的矩阵,在此不做过多的解释 2.稀疏数组 当一个二维数组中大多值为0,或者相同时,我们可以考虑用到稀疏数组,来减少内存 稀疏数组的处理方法: 1)一个有3列的二维数组,记录原数组有几行几列,多少个不同的值 2)不同值的元素的所在行以及列记录在稀疏数组中,从而缩小规模 3.例子如下: 4.下面是稀疏数组以及二维数组之间的转换 package com.ebiz.array; /** * @author YHj * @create 2019-07-13 16:46