参考:

  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. 洛谷P1615 西游记公司

    题目背景 一道极其无厘头的题目 题目描述 事情是这样的:西游记中的孙沙猪(孙杀猪)三徒弟在西天取经之后开始进入厦门大学经贸系学习经济,在1个小时的学习后,他们用暴力手段毕业了.然后,他们创办了三个公司 ...

  2. HDU 5641 King's Phone【模拟】

    题意: 给定一串密码, 判断是否合法. 长度不小于4 不能重复经过任何点 不能跳过中间点,除非中间点已经经过一次. 分析: 3*3直接记录出可能出现在两点之间的点,直接模拟就好. 注意审题,别漏了判断 ...

  3. mysql常用jar包

    连接Mysql数据库: 常用的连接池有两种 DBCP连接池 C3P0连接池 Apache的commons组件 -- DBCP连接池: commons-dbutils-1.4.jar 封装并简化了JDB ...

  4. Ubuntu 16.04下减小/释放/清理VirtualBox虚拟硬盘文件的大小

    一般在VirtualBox中安装Windows,然后用无缝模式进行某些特定软件的使用. 而VirtualBox的虚拟硬盘会越用越大,并且VirtualBox没有自带清理工具,相比VMware来说,VM ...

  5. Ubuntu 16.04中XMind 8导致Java内存溢出的问题解决(硬盘卡死,桌面卡死)

    XMind使用的是Java进行开发,如果出现内存溢出的问题,那么一定是桌面快捷方式的问题,解决方法是直接修改快捷方式里面的内容,修改如下: [Desktop Entry] Encoding=UTF-8 ...

  6. 条款21: 尽可能使用const

    对指针来说,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const,还有,两者都不指定为const: char *p = "hello"; ...

  7. [TypeScript] Use TypeScript’s never Type for Exhaustiveness Checking

    TypeScript 2.0 introduced a new primitive type called never, the type of values that never occur. It ...

  8. CSS 全部的列表样式类型

    <html> <head> <style type="text/css"> ul.none {list-style-type: none} ul ...

  9. Xcode iOS9.3 配置包 iOS10.0 配置包 iOS10.2 配置包 could not find developer disk image

    在Finder状态下前往目录.快捷键:shift+command+G,填写路径/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS ...

  10. 2015 Multi-University Training Contest 9-1007 Travelling Salesman Problem

    Problem Description Teacher Mai is in a maze with n rows and m columns. There is a non-negative numb ...