参考:

  https://liuzhichao.com/p/832.html

  http://www.2cto.com/kf/201311/255640.html

1,简介:

  SparseArray是android里为<Interger,Object> 这样的Hashmap而专门写的类,目的是提高效率,其核心是折半查找函数(binarySearch)。

  SparseBooleanArray 用来取代 HashMap<Integer, Boolean>。

  SparseIntArray 用来取代 HashMap<Integer, Integer>。

  在Android中,当我们需要定义

HashMap <Integer, E> hashMap = new HashMap <Integer, E> ();

  时,我们可以使用如下的方式来取得更好的性能.

SparseArray <E> sparseArray = new SparseArray <E> ();

2,增删改查api

增:

  public void put(int key, E value) {}
public void append(int key, E value){}

删:

  public void delete(int key) {}
public void remove(int key) {}   //直接调用的delete(int key)
public void removeAt(int index){}
public void clear(){}

改:

  public void put(int key, E value)
public void setValueAt(int index, E value)

查:

 public E get(int key)
public E get(int key, E valueIfKeyNotFound)
public int keyAt(int index)     //查看第几个位置的键
public E valueAt(int index)     //查看第几个位置的值
public int indexOfValue(E value)  //查看值所在位置,没有的话返回-1

3,示例:

   void testSparseArray() {
SparseArray<String> sparseArray = new SparseArray<>(); //增加的两种方式
sparseArray.append(, "This is 0");
sparseArray.append(, "This is 1");
sparseArray.append(, "This is 2"); sparseArray.put(, "This is 3");
sparseArray.put(, "This is 4"); //遍历
for (int i = ; i < sparseArray.size(); i++) {
System.out.println("遍历得到位置" + i + "的值为:" + sparseArray.get(i));
} //查找某个位置的键
int key = sparseArray.keyAt();
System.out.println("查找位置1处的键 key=" + key); //查找某个位置的值
String value = sparseArray.valueAt();
System.out.println("查找位置1处的值 value=" + value); //修改的两种方式
sparseArray.put(, "This is new 0");
sparseArray.put(, "This is new 1");
sparseArray.setValueAt(, "This is new 2");
sparseArray.setValueAt(, "This is new 3");
for (int i = ; i < sparseArray.size(); i++) {
System.out.println("修改后遍历得到位置" + i + "的值为:" + sparseArray.get(i));
} //删除
sparseArray.delete();
System.out.println("删除操作后sparseArray大小 size=" + sparseArray.size());
//注意:
//在执行删除后sparseArray的size()减小了1
//为了遍历完,应该将循环条件修改为i < sparseArray.size()+1
//HashMap也有类似的情况.参见分割线以下的例子
//如果关于SparseArray的遍历有什么好的方法或者建议,多谢
for (int i = ; i < sparseArray.size() + ; i++) {
System.out.println("删除后遍历得到位置" + i + "的值为:" + sparseArray.get(i));
} System.out.println("//////////////这是分割线////////////////"); HashMap<Integer, String> hashMap = new HashMap<>();
hashMap.put(, "");
hashMap.put(, "");
hashMap.put(, "");
hashMap.put(, "");
hashMap.put(, "");
for (int i = ; i < hashMap.size(); i++) {
System.out.println("HashMap遍历得到位置" + i + "的值为:" + hashMap.get(i));
} hashMap.remove(Integer.valueOf());
System.out.println("删除操作后hashMap大小 size=" + hashMap.size());
//注意:
//在执行删除后hashMap的size()减小了1
//为了遍历完,应该将循环条件修改为i < hashMap.size()+1
for (int i = ; i < hashMap.size() + ; i++) {
System.out.println("HashMap遍历得到位置" + i + "的值为:" + hashMap.get(i));
} //但是这样做是意义不大的,我们常用的是利用keySet来遍历,如下:
Set<Integer> set = hashMap.keySet();
for (Integer keyTemp : set) {
String valueTemp = hashMap.get(keyTemp);
System.out.println("利用keySet遍历:" + keyTemp + "的值是" + valueTemp);
}
}

Android内存管理(15)SparseArray系列代替HashMap系列的更多相关文章

  1. Android内存管理机制之一:low memory killer

    转载自http://www.miui.com/thread-29268-1-1.html 准备写这个专题之前,心里是有点忐忑的.首先Android内存管理机制相当复杂,想要讲清楚比较困难:其次对于绝大 ...

  2. [Android Memory] Android内存管理、监测剖析

    转载自:http://blog.csdn.net/anlegor/article/details/23398785 Android内存管理机制: Android内存管理主要有:LowMemory Ki ...

  3. Android 内存管理分析(四)

    尊重原创作者,转载请注明出处: http://blog.csdn.net/gemmem/article/details/8920039 最近在网上看了不少Android内存管理方面的博文,但是文章大多 ...

  4. 移动端测试===Android内存管理: 理解App的PSS

    Android内存管理: 理解App的PSS 原文链接:http://www.littleeye.co/blog/2013/06/11/android-memory-management-unders ...

  5. 浅谈Android内存管理

    最近在网上看了不少Android内存管理方面的博文,但是文章大多都是就单个方面去介绍内存管理,没有能全局把握,缺乏系统性阐述,而且有些观点有误,仅仅知道这些,还是无法从整体上理解内存管理,对培养系统优 ...

  6. Android——内存管理基础

    内存收集概念 内存垃圾收集器(garbage collector) 概念:自定内存管理. 功能:分配内存.保证所有被引用的对象还在内存中.可以释放在运行的代码中不再引用的对象的内存. 垃圾收集器避免了 ...

  7. Android内存管理(4)*官方教程 含「高效内存的16条策略」 Managing Your App's Memory

    Managing Your App's Memory In this document How Android Manages Memory Sharing Memory Allocating and ...

  8. Android 内存管理之优化建议

    OOM(OutOfMemory)转:http://hukai.me/android-performance-oom/ 前面我们提到过使用getMemoryClass()的方法可以得到Dalvik He ...

  9. Android内存管理(13)常见产生内存泄漏的原因

    1.集合类泄漏 集合类如果仅仅有添加元素的方法,而没有相应的删除机制,导致内存被占用.如果这个集合类是全局性的变量 (比如类中的静态属性,全局性的 map 等即有静态引用或 final 一直指向它), ...

随机推荐

  1. 斯特林(Stirling)公式 求大数阶乘的位数

    我们知道整数n的位数的计算方法为:log10(n)+1n!=10^m故n!的位数为 m = log10(n!)+1 lgN!=lg1+lg2+lg3+lg4+lg5+................. ...

  2. hdu - 1151 Air Raid(有向无环图的最小路径覆盖)

    http://acm.hdu.edu.cn/showproblem.php?pid=1151 在一个城市里有n个地点和k条道路,道路都是单向的,并且不存在环.(DAG) 现在伞兵需要去n个地点视察,伞 ...

  3. 搬砖--杭电校赛(dfs)

    搬砖 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total Submissi ...

  4. mysql性能调优——锁优化

    影响mysql server性能的相关因素 需求和架构及业务实现优化:55% Query语句优化:30% 数据库自身优化:15% 很多时候大家看到数据库应用系统中性能瓶颈出现在数据库方面,就希望通过数 ...

  5. 理解C语言中指针的声明以及复杂声明的语法

    昨天刚把<C程序设计语言>中"指针与数组"章节读完,最终把心中的疑惑彻底解开了.如今记录下我对指针声明的理解.顺便说下怎样在C语言中创建复杂声明以及读懂复杂声明. 本文 ...

  6. PHP数组去空项

    $strDelCodes = "A;B;;C;;C;D;;;D;D";$rsArray = array_values (array_unique (array_diff (spli ...

  7. Photoshop制作的ico图标方法

    photoshop是打不开ico的.只是能够通过安装插件实现. 插件点击这里能够下载. 用法,解压后的插件文件 粘贴到:  (英文版路径) /program files/adobe/photoshop ...

  8. Lunix

    1.Lunix系统登录.重启.关闭 ①.登录 ②.重启 ③.关闭:shutdown [选项][时间][警告信息] -k 向所有用户发出警告信息 -r 关机后立即重启 -h 关机后不重新启动 -f 快速 ...

  9. [DevExpress]GridControl分页的实现

    加入两个组件:BindingNavigator和BindingSource 代码: using System; using System.Collections.Generic; using Syst ...

  10. UVA10056 - What is the Probability ?(概率)

    UVA10056 - What is the Probability ? (概率) 题目链接 题目大意:有n个人玩游戏,一直到一个人胜出之后游戏就能够结束,要不然就一直从第1个到第n个循环进行,没人一 ...