参考:

  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);
}
}

最新文章

  1. git &amp;github 快速入门
  2. zen Code 支持的代码样式
  3. window.open
  4. Linux0.11内核--进程调度分析之1.初始化
  5. 搭建maven环境
  6. Git.Framework 框架随手记--ORM条件组合
  7. iPhone socket 编程之BSD Socket篇
  8. linux 切换多个jdk脚本
  9. Android Loader详解一:概述
  10. css分割线 文字居中的7种实现方式
  11. POJ3185 The Water Bowls(反转法or dfs 爆搜)
  12. 1. Server.Transfer和Response.Redirect
  13. $.each()遍历json数据
  14. rem ~~ 你懂了吗?
  15. day05 数据类型的方法详解
  16. 最长公共前缀(python) leetcode答案
  17. flex-grow,flex-shrink,flex-basis及flex
  18. 我们为什么要使用List和Set(List,Set详解)
  19. 文件打包(.zip)并返回打压缩包存放路径
  20. WebClient和WebRequest获取html代码

热门文章

  1. QT-Embedded-4.5.3在海思35xx上移植
  2. iphone原生cookie处理
  3. Codeforces 651C Watchmen【模拟】
  4. Ubuntu 16.04安装GTX960闭源驱动
  5. TensorFlow-GPU环境配置之二——CUDA环境配置
  6. 关于jQuery写插件及其演示
  7. Myeclipse的优化方法
  8. Class 与 new的配合使用
  9. Python开发【1.4数据类型】
  10. 安装ubuntu后启动黑屏