参考:

  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. 无权二分图最大匹配 HDU2063 匈牙利算法 || Hopcroft-Karp

    参考两篇比较好的博客 http://www.renfei.org/blog/bipartite-matching.html http://blog.csdn.net/thundermrbird/art ...

  2. POJ 3468_A Simple Problem with Integers(树状数组)

    完全不知道该怎么用,看书稍微懂了点. 题意: 给定序列及操作,求区间和. 分析: 树状数组可以高效的求出连续一段元素之和或更新单个元素的值.但是无法高效的给某一个区间的所有元素同时加个值. 不能直接用 ...

  3. Layui选项卡、进度条、面板、徽章、时间线、辅助元素

    Layui选项卡.进度条.面板.徽章.时间线.辅助元素 Tab选项卡 - 页面元素    导航菜单可应用于头部和侧边,Tab选项卡提供多套风格,支持响应式,支持删除选项卡等功能.面包屑结构简单,支持自 ...

  4. Network-POJ3694(最小公共祖先LCA+Tarjin)

    http://poj.org/problem?id=3694 这一题  为什么要找最小祖先呢 当两个节点连到一块的时候  找最小公共节点就相当于找强连通分支 再找最小公共节点的过程中直到找到  这个过 ...

  5. Android: Mac无法找到Android SDK问题

    通过brew cask install android-sdk后,Intellij Idea中设置Android SDK路径失败,解决方法如下: /usr/local/Caskroom/android ...

  6. Kernel与用户进程通信

    测试IPv6 ready logo   rfc 3315的时候,遇到一个问题,要求在收到ICMPv6 RA的时候,DHCPv6  Client要发Solicit消息.在平常的应用中,都是启动DHCPv ...

  7. UVa 340 Master-Mind Hints(猜数字游戏的提示)

    题意  猜数字游戏  统计猜的数字有多少个数字位置正确  有多少个数字在答案中出现可是位置不对  每一个字符仅仅能匹配一次 直接匹配每位数 #include<cstdio> #includ ...

  8. scala 入门Eclipse环境搭建及第一个入门经典程序HelloWorld

    scala 入门Eclipse环境搭建及第一个入门经典程序HelloWorld 学习了: http://blog.csdn.net/wangmuming/article/details/3407911 ...

  9. C#程序如何把窗体文件从从一个项目中复制到另一个项目

    一个窗体有三个文件,全部拷贝到新的项目中   在新的项目中点击显示所有文件,然后右击导入的文件,点击包括在项目中,会自动修改颜色(此时还没有被识别为窗体)   重启这个项目,三个文件已经被识别出来了 ...

  10. 软考之J2SE

    特别感谢软考让我如今就接触了神奇的java.曾经尽管真不知道java是个神马,看完马士兵的视频发现里面的东西并不陌生.有vb,c++,c#做基础加上这次的J2SE发现原来编程语言有非常多同样的特性.也 ...