参考:

  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. [NOIP2007] 提高组 洛谷P1098 字符串的展开

    题目描述 在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或者“4-8”的字串,我们就把它当作一种简写,输出时,用连续递增的字母获数 ...

  2. hdu - 1195 Open the Lock (bfs) && hdu 1973 Prime Path (bfs)

    http://acm.hdu.edu.cn/showproblem.php?pid=1195 这道题虽然只是从四个数到四个数,但是状态很多,开始一直不知道怎么下手,关键就是如何划分这些状态,确保每一个 ...

  3. transaction transaction transaction 最大费用最大流转化到SPFA最长路

    //当时比赛的时候没有想到可以用SPFA做,TLE! Problem Description Kelukin is a businessman. Every day, he travels aroun ...

  4. [bzoj2527][Poi2011]Meteors_整体二分_树状数组

    Meteors bzoj-2527 Poi-2011 题目大意:题目链接. 注释:略. 想法: 首先答案可以离线,且具有单调性. 这里的单调性就是随着时间的推移,每个国家收集的陨石数增加. 不难想到整 ...

  5. Caocao's Bridges-HDU4738(Tarjin+求桥)

    http://acm.hdu.edu.cn/showproblem.php?pid=4738 题目大意: 给定n个点和m条边  和每条边的价值,求桥的最小价值(最小桥) 看着挺简单的但是有好多细节: ...

  6. MySQL使用教程收集(语法教程/命令教程)

    说明:现在市面上的教程除了基本语法外,都基本是五花八门的,最权威且最全面的解释应该上官网去查看. https://www.tutorialspoint.com/mysql/index.htm http ...

  7. 一 hadoop 相关介绍

    hadoop 相关介绍 hadoop的首页有下面这样一段介绍.对hadoop是什么这个问题,做了简要的回答. The Apache™ Hadoop® project develops open-sou ...

  8. 使用maven时,如何修改JVM的配置参数;maven命令执行时到底消耗多少内存?

    maven是使用java启动的,因此依赖JVM,那么如何修改JVM参数? MAVEN_OPTS 在系统的环境变量中,设置MAVEN_OPTS,用以存放JVM的参数,具体设置的步骤,参数示例如下: MA ...

  9. fuse-dfs挂载hdfs实录

    部署安装了最新稳定版hadoop2.2.0.然后在网上找来fuse-dfs编译教程.可是最后失败了.至今原因未知--,错误描写叙述为:Transport endpoint is not connect ...

  10. 冲刺Offer - 二叉树的深度

    https://www.nowcoder.net/practice/435fb86331474282a3499955f0a41e8b?tpId=13&tqId=11191&tPage= ...