SparseArray

原创 2013年12月06日 09:26:53

单纯从字面上来理解,SparseArray指的是稀疏数组(Sparse array),所谓稀疏数组就是数组中大部分的内容值都未被使用(或都为零),在数组中仅有少部分的空间使用。因此造成内存空间的浪费,为了节省内存空间,并且不影响数组中原有的内容值,我们可以采用一种压缩的方式来表示稀疏数组的内容。


在此数组中,共有63个空间,但却只使用了5个元素,造成58个元素空间的浪费。以下我们就使用稀疏数组重新来定义这个数组:


其中在稀疏数组中第一部分所记录的是原数组的列数和行数以及元素使用的个数、第二部分所记录的是原数组中元素的位置和内容。经过压缩之后,原来需要声明大小为63的数组,而使用压缩后,只需要声明大小为6*3的数组,仅需18个存储空间。

继续阅读SparseArray的源码,从构造方法我们可以看出,它和一般的List一样,可以预先设置容器大小,默认的大小是10

public SparseArray() {
        this(10);
    }
 
    public SparseArray(int initialCapacity) {
        initialCapacity = ArrayUtils.idealIntArraySize(initialCapacity);
 
        mKeys = new int[initialCapacity];
        mValues = new Object[initialCapacity];
        mSize = 0;
    }
1.插入   
public void put(int key, E value) {}
public void append(int key, E value){}
2.删除
public void delete(int key) {}
public void remove(int key) {} //直接调用的delete(int key)
public void removeAt(int index){}
public void clear(){}
//例如下面的代码
sparseArray.remove(sparseArray.keyAt(0));
3.修改
public void put(int key, E value)
public void setValueAt(int index, E value)
4.查找
public E get(int key)
public E get(int key, E valueIfKeyNotFound)
5.另外还有通过下标来访问的
public int keyAt(int index)
public E valueAt(int index)
或者获得下标的
public int indexOfValue(E value)
6.遍历
类似数组的遍历 获取大小后按顺序取出每个元素
public String listArray()
	{
		StringBuffer result = new StringBuffer();
		int size = sparseArray.size();
		if(size == 0)
		{
			return "threadMap size is 0";
		}
		for(int i = 0; i < size; i++)
		{
			if(sparseArray.keyAt(i) > 0)
			{
				result.append(i+"="+sparseArray.keyAt(i)+"; ");
			}
		}
		return result.toString();
	}


无聊测试了下,删除一个元素后,size会减1,但是假如遍历整个数组,即i < 10  的话,依然能得到下标是size-1 即9的元素。
例如数组= {0=0,1=1,2=2,3=3}  size是4  删掉下标0后,变成了{0=1,1=2,2=3}
但是使用4来遍历的话  {0=1,1=2,2=3,3=3}
即  会保存最大size的值,当小于最大size时,填充最后的下标元素的值。有时间看看源码希望能找到答案。




版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Android内存优化(使用SparseArray和ArrayMap代替HashMap)

在Android开发时,我们使用的大部分都是Java的api,比如HashMap这个api,使用率非常高,但是对于android这种对内存非常敏感的移动平台,很多时候使用一些java的api并不能达到...

Android开发性能优化之SparseArray和HashMap

参考链接:http://blog.csdn.net/pi9nc/article/details/11352491多数Android开发者都知道在Android中可以使用HashMap来映射一种对应关系...

Android优化工具SparseArray稀疏数组

原文网址:http://liuzhichao.com/p/832.html HashMap是java里比较常用的一个集合类,我比较习惯用来缓存一些处理后的结果。最近在做一个Android项目...

Android内存优化---使用SparseArray和ArrayMap

Android 平台对内存敏感,所以需要在代码中对数据结构进行一定程度的优化,下面比较常用的几种Map实现 HashMapJava中比较常用的Map实现类,但是对内存的利用率并不是很高,HashMap...

当用到Map<Integer,E>的使用,用SparseArray<E>替代性能更好

懒得自己整理了,直接转一个博客了 链接 https://liuzhichao.com/p/832.html HashMap是java里比较常用的一个集合类,我比较习惯用来缓存一些处理后的结果...

Android SparseArray源码详解

尊重原创,转载请标明出处    http://blog.csdn.net/abcdef314159 在Android开发中如果使用key为Integer的HashMap,就会出现黄色警告,提示使用Sp...

Android应用性能优化之使用SparseArray替代HashMap

转载出处:http://liuzhichao.com/p/832.html HashMap是java里比较常用的一个集合类,我比较习惯用来缓存一些处理后的结果。最近在做一个Android项目...

Android编程之SparseArray<E>详解

转载:http://blog.csdn.net/xyz_fly/article/details/7931943 最近编程时,发现一个针对HashMap的一个提示: 翻译过来就是:用Spar...

数据结构HashMap(Android SparseArray 和ArrayMap)

HashMap也是我们使用非常多的Collection,它是基于哈希表的 Map 接口的实现,以key-value的形式存在。在HashMap中,key-value总是会当做一个整体来处理,系统会根据...

Java中HashMap和SparseArray的数据结构

最近听同事说使用SparseArray代替HashMap可以提高性能,于是边对这两个类的数据结构进行简单的分析。 Hashmap的数据结构  Hashmap是一个数组和链表的结合体(在数据结构...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)