SparseArray 是官方推荐的用来替代 HashMap 的一个工具类,相比来说有着更好的性能(其核心是折半查找函数(binarySearch))。...通过源码来看下SparseArray的一些使用特点: -----------------------------------------------------------------------...-------------------------------- 1、SparseArray可以预先设置容器大小,默认是10 /** * Creates a new SparseArray...containing no mappings. */ public SparseArray() { this(10); } -----------------
SparseArray SparseArray中Key为int类型(避免了装箱和拆箱),Value是Object类型,Key和Value分别存放在一个数组内,Key数组int值是按顺序排列的,查找的时候采用的是二分查找
SparseArray是android里为这样的Hashmap而专门写的class,目的是提高效率,其核心是折半查找函数(binarySearch)。...hashmap源码分析 所以Android开发中官方推荐:当使用HashMap(K, V),如果K为整数类型时,使用SparseArray的效率更高。.... */ public SparseArray() { this(10); } /** * 使用指定的初始容量构造SparseArray....mSize = 0; } 和HashMap的数据结构不同,HashMap是使用数组+链表的数据结构存储键值对,而SparseArray只是用了两个数组进行存储。...之所以SparseArray号称比HashMap有更好的性能: SparseArray更加节约内存,一个int[]数组存储所有的key,一个object[] 数组存储所有的value.
This article will show why and when use ArrayMap and SparseArray to optimize your Android Applications...Recommended data-structure : ArrayMap in place of HashMap ArraySet in place of HashSet SparseArray
但如果在Android编程中出现HashMap的时候,编译器就会提示用SparseArray代替HashMap。为什么呢?...而SparseArray就是通过时间换空间的办法降低HashMap的内存占用。...HashMap是通过数据加链表的方式存储数据的; SparseArray是使用纯数据的方式实现对数据的存储的; SparseArray主要是通过将Interger类型的key,以升序方式存储在mKeys...内存的分析来看,数据量在100000条时SparseArray要比HashMap要节约27%的内存,因此官方才推荐去使用SparseArray去替换HashMap.官方也确实声明这种差异性不会超过...看完整篇文章是不是迫不及待的就像使用SparseArray呢!!
SparseArray(稀疏数组).他是Android内部特有的数据结构,标准的jdk是没有这个类的.在Android内部用来替代HashMap这种形式,使用SparseArray...SparseArray vs HashMap SparseArray 使用的内存更少; HashMap的访问效率 平均高于 SparseArray ;...在以下情况下 数据量不大,最好在千级以内 key必须为int类型; 建议我们用SparseArray来代替HashMap。...简易使用支持的API SparseArray array = new SparseArray(); public void put(int key, E value) public...详解 Android学习笔记之性能优化SparseArray
最近在整理SparseArray这一知识点的时候,发现网上大多数SparseArray原理分析的文章都存在很多问题(可以说很多作者并没有读懂SparseArray的源码),也正因此,才有了这篇文章。...一、SparseArray的类结构 SparseArray可以翻译为稀疏数组,从字面上可以理解为松散不连续的数组。虽然叫做Array,但它却是存储K-V的一种数据结构。...大概这也是SparseArray名字的由来吧。 三、SparseArray的put()方法 作为一个存储K-V类型的数据结构,put方法是key和value的入口。...也是SparseArray中最重要的一个方法。...这也是网上大部分文章对应SparseArray的解析都是含糊不清的原因。相信通过本篇文章的学习一定对SparseArray的实现有了新的认识!
[5, 7] = 1; SparseArray[7, 5] = 1; SparseArray[7, 9] = 1; SparseArray...[7, 11] = 1; SparseArray[8, 10] = 2; SparseArray[10, 9] = 2; }...j = 0; j SparseArray.GetLength(1); j++) { var chess = SparseArray...{ var chess = SparseArray[i, j]; if (chess !...{ var chess = SparseArray[i, j]; if (chess !
= new int[valueNum + 1][3]; sparseArray[0][0] = rowNum; sparseArray[0][1] = colNum;...= 0) { sparseArray[rowCount][0] = i; sparseArray[rowCount][1]...@param sparseArray * @return */ static int[][] sparseArrayConvertArray(int[][] sparseArray...) { int rowNum = sparseArray[0][0]; int colNum = sparseArray[0][1]; int valueNum...valueNum + 1; i++) { int row = sparseArray[i][0]; int col = sparseArray[i][1]
sparseArray[count][1] = j; sparseArray[count][2] = array[i][j]; }...System.out.printf("%d%d%d\t",sparseArray[i][0],sparseArray[i][1],sparseArray[i][2]); }...oldArray[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2]; } //遍历刚转回的原始数组...;i++){ System.out.printf("%d%d%d\t",sparseArray[i][0],sparseArray[i][1],sparseArray...oldArray[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2]; } //遍历刚转回的原始数组
稀疏数组 稀疏数组(sparse array)是一种只为数组中的非零元素分配内存的特殊类型数组 内存中存储 了稀疏数组中非零元素的下标和值 public class SparseArray {...= new int[sum+1][3]; //给稀疏数组赋值 sparseArray[0][0] = 11; sparseArray...sparseArray[count][1] = j; sparseArray[count][2] = array[i][j];...oldArray[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2]; } //遍历刚转回的原始数组...) throws Exception { File file = new File("sparseArray.txt"); if(!
= generateSparseArray(arrays); for (int[] ints : sparseArray) { System.out.println...= new int[num + 1][3]; sparseArray[0][0] = row; sparseArray[0][1] = col; sparseArray...= 0) { sparseArray[currentRow][0] = i; sparseArray[currentRow...(int[][] sparseArray) { int row = sparseArray[0][0]; int col = sparseArray[0][1];...; i++) { int r = sparseArray[i][0]; int c = sparseArray[i][1]; int
[][] = new int[unZeroSum+1][3] ; sparseArray[0][0] = 11 ;// 0行0列值:11 sparseArray[0][1] = 11 ;...("%d\t%d\t%d\t\n", sparseArray[i][0], sparseArray[i][1],...sparseArray[i][2]); } return sparseArray ; } 4)、方法三:转为二维数组 public static void convertSparseArray...[][] = new int[sparseArray[0][0]][sparseArray[0][1]] ; // 非零元素赋值给二维数组 for(int i = 1; i sparseArray.length...; i++) { // 几行、几列、是什么值 chessArray[sparseArray[i][0]][sparseArray[i][1]] = sparseArray
一、数据结构篇 1.SparseArray —— 替代HashMap,主要有以下几种 SparseLongArray SparseIntArray SparseBooleanArray SparseArray...SparseArray比HashMap更省内存,它对数据采取了压缩的方式来表示稀疏数组的数据,从而节约内存空间,SparseArray只能存储key为int类型的数据,同时,SparseArray在存储和读取数据时候...,使用的是二分查找法 //创建一个存储String值得SparseArray SparseArray sparseArray = new SparseArray();...//存储 注意key是int类型 sparseArray.put(1, "zhangsan"); sparseArray.put(2, "123456"); //通过int类型的key获取value...sparseArray.get(1); //第二个参数是默认值 sparseArray.put(2, "000000"); //获取索引处的key与value sparseArray.keyAt(1)
Spare data的例子 我们创建一个数组,然后将其大部分数据设置为NaN,接着使用这个数组来创建SparseArray: In [1]: arr = np.random.randn(10) In...[2]: arr[2:-2] = np.nan In [3]: ts = pd.Series(pd.arrays.SparseArray(arr)) In [4]: ts Out[4]: 0...SparseArray arrays.SparseArray 是一个 ExtensionArray ,用来存储稀疏的数组类型。...中,并且会返回一个SparseArray。...取代他们的是功能更强的SparseArray。
强烈推介IDEA2020.2破解激活,IntelliJ IDEA 注册码,2020.2 IDEA 激活码 一、稀疏数组的定义 ---- 稀疏(sparsearray...【1】将上面类似的二位数组棋盘保存到稀疏数组中,并存放至外部备份文件 sparsearray.text 中:稀疏数组可以简单的看作为是压缩,在开发中也会使用到。...= new int[sum+1][3]; sparseArray[0][0] = intArr.length; sparseArray[0][1] = intArr[0...].length; sparseArray[0][2] = sum; //创建一个变量,用于存放稀疏的行数 int num = 0; /...= 0){ ++num; sparseArray[num][0]=i; sparseArray
= new int[nonZeroCount + 1][3]; sparseArray[0][0] = rowCount; sparseArray[0][1] = colCount...; sparseArray[0][2] = nonZeroCount; // 将非默认值元素存入稀疏数组 int index = 1;...= 0) { sparseArray[index][0] = i; sparseArray[index][1] = j;...(int[][] sparseArray) { int rowCount = sparseArray[0][0]; int colCount = sparseArray[...; i++) { int row = sparseArray[i][0]; int col = sparseArray[i][1];
这次总结了个常见的集合思维导图: 这里面主要的知识点是 Java 集合中的 HashMap 与 Android 集合中 ArrayMap、SparseArray 的比较了,引用 Gityuan 的总结...: 数据结构 ArrayMap 和 SparseArray 采用的都是两个数组,Android专门针对内存优化而设计的 HashMap 采用的是数据+链表+红黑树 内存优化 ArrayMap 比 HashMap...更节省内存,综合性能方面在数据量不大的情况下,推荐使用 ArrayMap; Hash 需要创建一个额外对象来保存每一个放入 map 的 entry,且容量的利用率比 ArrayMap 低,整体更消耗内存 SparseArray...比 ArrayMap 节省1/3的内存,但 SparseArray 只能用于 key 为 int 类型的 Map,所以int类型的Map数据推荐使用 SparseArray; 性能方面: ArrayMap...查找时间复杂度 O(logN);ArrayMap 增加、删除操作需要移动成员,速度相比较慢,对于个数小于 1000 的情况下,性能基本没有明显差异 HashMap 查找、修改的时间复杂度为O(1); SparseArray
根据sum创建稀疏数组 sparseArray[sum+1][3], 3代表列数且为固定 * 3....= new int[sum + 1][3]; sparseArray[0][0] = chessArray1.length; sparseArray[0][1] = chessArray1...[count][0] = i; sparseArray[count][1] = j; sparseArray[count]...在去读稀疏数组后几行数据, 并赋值给原始的二维数组即可 */ int[][] chessArray2 = new int[sparseArray[0][0]][sparseArray...; i++) { chessArray2[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2]; }
一、稀疏数组sparsearray 1、一个实际的应用场景 编写的五子棋程序中,有存盘退出和续上盘的功能: 问题分析: 因为该二维数组的很多值是默认值0, 因此记录了很多没有意义的数据,我们这个时候可以使用稀疏数组实现对二维数组的压缩...,确定二维数组的元素,赋值给二维数组; 6、稀疏数组与二位数组互转代码实现 二维数组转稀疏数组: 代码演示: package com.zb.ds; //二维数组转稀疏数组 public class SparseArray...= new int[sum+1][3]; //3、将二维数组的有效元素存到稀疏数组 //首元素 sparseArray[0] = new int[]{nums.length...[0][0]][sparseArray[0][1]]; //2、遍历稀疏数组,将对应的值存入二维数组 for (int i = 1; i sparseArray.length...; i++) { nums1[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2]; }
领取专属 10元无门槛券
手把手带您无忧上云