SparseArray<E> 是官方推荐的用来替代 HashMap<Integer, E> 的一个工具类,相比来说有着更好的性能(其核心是折半查找函数(binarySearch))。

通过源码来看下SparseArray<E>的一些使用特点:

-------------------------------------------------------------------------------------------------------

1、SparseArray可以预先设置容器大小,默认是10

    /*** Creates a new SparseArray containing no mappings.*/public SparseArray() {this(10);}

-------------------------------------------------------------------------------------------------------

2、增删改查

(1)两种添加数据的方法

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

其中append()内部调用了put()

put()内部又使用了二分法存储数据,由此可见:它存储的数值都是按键值从小到大的顺序排列好的

static int binarySearch(int[] array, int size, int value) {int lo = 0;int hi = size - 1;while (lo <= hi) {final int mid = (lo + hi) >>> 1;final int midVal = array[mid];if (midVal < value) {lo = mid + 1;} else if (midVal > value) {hi = mid - 1;} else {return mid;  // value found
            }}return ~lo;  // value not present}

(2)四种删除数据的方法

--前两种

public void delete(int key)
public void remove(int key)  

两者作用是相同的,没区别,因为remove()内部就直接调用了delete()

/**
* Alias for {@link #delete(int)}.
*/
public void remove(int key) {delete(key);
}

--后两种

public void removeAt(int index)
public void clear()

一个是删除指定坐标的数据

一个是清空所有的数据

(3)两种修改数据的方法

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

这里put()方法可能会有疑惑,它不是添加数据的么,怎么也可以修改数据了?

看下put()部分源码:

int i = ContainerHelpers.binarySearch(mKeys, mSize, key);if (i >= 0) {mValues[i] = value;} else {

先是查找这个key是不是存在,返回一个整型,如果i>=0,说明存在,直接修改值 ,否则执行else()添加数据

(4)查询获取数据的方法

--获取键对应的值

public E get(int key)
public E get(int key, E valueIfKeyNotFound) 

很简单,获取某个键对应的值,两个参数的方法的第二个参数当然就是没有这个key键,返回的默认值

--根据坐标获取该位置的键

public int keyAt(int index) 

--根据坐标获取该位置的值

public E valueAt(int index)

----------------------------------------------

--查看键所在的位置

public int indexOfKey(int key)  

--查看值所在的位置

public int indexOfValue(E value)

这两个方法返回一个整型数值,往常来说,返回-1代表不存在。

但是这两个方法返回的值不确定,但查询不到的话返回的值还是一个负数。判断是否小于0即可

-------------------------------------------------------------------------------------------------------

相关知识:

Java集合框架

SparseArrayE详解相关推荐

  1. Android编程之SparseArrayE详解 Android编程之SparseArrayE详解

    Android编程之SparseArray<E>详解 分类:Android2012-09-01 13:139412人阅读评论(5)收藏举报 android编程delete存储list 最近 ...

  2. 【轉】Android编程之SparseArrayE详解

    为什么80%的码农都做不了架构师?>>>    最近编程时,发现一个针对HashMap<Integer, E>的一个提示: 翻译过来就是:用SparseArray< ...

  3. 从命令行到IDE,版本管理工具Git详解(远程仓库创建+命令行讲解+IDEA集成使用)

    首先,Git已经并不只是GitHub,而是所有基于Git的平台,只要在你的电脑上面下载了Git,你就可以通过Git去管理"基于Git的平台"上的代码,常用的平台有GitHub.Gi ...

  4. JVM年轻代,老年代,永久代详解​​​​​​​

    秉承不重复造轮子的原则,查看印象笔记分享连接↓↓↓↓ 传送门:JVM年轻代,老年代,永久代详解 速读摘要 最近被问到了这个问题,解释的不是很清晰,有一些概念略微模糊,在此进行整理和记录,分享给大家.在 ...

  5. docker常用命令详解

    docker常用命令详解 本文只记录docker命令在大部分情境下的使用,如果想了解每一个选项的细节,请参考官方文档,这里只作为自己以后的备忘记录下来. 根据自己的理解,总的来说分为以下几种: Doc ...

  6. 通俗易懂word2vec详解词嵌入-深度学习

    https://blog.csdn.net/just_so_so_fnc/article/details/103304995 skip-gram 原理没看完 https://blog.csdn.net ...

  7. 深度学习优化函数详解(5)-- Nesterov accelerated gradient (NAG) 优化算法

    深度学习优化函数详解系列目录 深度学习优化函数详解(0)– 线性回归问题 深度学习优化函数详解(1)– Gradient Descent 梯度下降法 深度学习优化函数详解(2)– SGD 随机梯度下降 ...

  8. CUDA之nvidia-smi命令详解---gpu

    nvidia-smi是用来查看GPU使用情况的.我常用这个命令判断哪几块GPU空闲,但是最近的GPU使用状态让我很困惑,于是把nvidia-smi命令显示的GPU使用表中各个内容的具体含义解释一下. ...

  9. Bert代码详解(一)重点详细

    这是bert的pytorch版本(与tensorflow一样的,这个更简单些,这个看懂了,tf也能看懂),地址:https://github.com/huggingface/pytorch-pretr ...

最新文章

  1. MFC中的字符串转换
  2. 釜底抽薪:掌控能源成本,根治企业能源损耗
  3. conda安装pytorch1.10.1+paddlepaddle-gpu2.2.1+cuda10.2+cudnn7.6.5
  4. UML学习-----类图
  5. python socket监听端口_Python 用socket模块实现检测端口和检测web服务
  6. 猎豹移动傅盛:区块链将重塑整个社会关系,CEO恐将职位不保
  7. spark hive 结合处理 把多行变成多列
  8. 使用SaltStack安装JBoss
  9. SM2算法全套(基于GMSSL)
  10. 高频电子线路实验箱QY-JXSY25
  11. python抢优惠券程序_python3 优惠券查询GUI程序
  12. web百度离线地图开发(详细教程)2019
  13. slam 直接法(七)
  14. Android:BroadCast Receiver
  15. Source Code Chain(SCC):基于区块链的人工智能软件工程项目
  16. 如何修改树莓派系统时间
  17. 《Nature-Inspired Metaheuristic Algorithms》—— Random Walk
  18. 用lisp语言写一段cad提取坐标代码
  19. SSL连接dh key too small
  20. 第四十八篇 安规测试

热门文章

  1. ABP(现代ASP.NET样板开发框架)系列之2、ABP入门教程
  2. 亲测_精简版Fiddler抓包手机端GET请求过程.
  3. Power BI for Office 365(八)共享查询
  4. 计划任务中allow和deny的优先级
  5. apache启动报错记录
  6. php warning: file_get_contents,Ecshop报警告:Warning: file_get_contents
  7. 怎么写脚本_直播脚本怎么写|请收下这份攻略
  8. 误删mysql数据库密码后,如何恢复密码
  9. mysql每秒57000_MySQL 性能:使用 MySQL 5.7 实现每秒 50 万查询
  10. MySQL单行函数分类