SparseArrayE详解
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详解相关推荐
- Android编程之SparseArrayE详解
Android编程之SparseArrayE详解
Android编程之SparseArray<E>详解 分类:Android2012-09-01 13:139412人阅读评论(5)收藏举报 android编程delete存储list 最近 ...
- 【轉】Android编程之SparseArrayE详解
为什么80%的码农都做不了架构师?>>> 最近编程时,发现一个针对HashMap<Integer, E>的一个提示: 翻译过来就是:用SparseArray< ...
- 从命令行到IDE,版本管理工具Git详解(远程仓库创建+命令行讲解+IDEA集成使用)
首先,Git已经并不只是GitHub,而是所有基于Git的平台,只要在你的电脑上面下载了Git,你就可以通过Git去管理"基于Git的平台"上的代码,常用的平台有GitHub.Gi ...
- JVM年轻代,老年代,永久代详解
秉承不重复造轮子的原则,查看印象笔记分享连接↓↓↓↓ 传送门:JVM年轻代,老年代,永久代详解 速读摘要 最近被问到了这个问题,解释的不是很清晰,有一些概念略微模糊,在此进行整理和记录,分享给大家.在 ...
- docker常用命令详解
docker常用命令详解 本文只记录docker命令在大部分情境下的使用,如果想了解每一个选项的细节,请参考官方文档,这里只作为自己以后的备忘记录下来. 根据自己的理解,总的来说分为以下几种: Doc ...
- 通俗易懂word2vec详解词嵌入-深度学习
https://blog.csdn.net/just_so_so_fnc/article/details/103304995 skip-gram 原理没看完 https://blog.csdn.net ...
- 深度学习优化函数详解(5)-- Nesterov accelerated gradient (NAG) 优化算法
深度学习优化函数详解系列目录 深度学习优化函数详解(0)– 线性回归问题 深度学习优化函数详解(1)– Gradient Descent 梯度下降法 深度学习优化函数详解(2)– SGD 随机梯度下降 ...
- CUDA之nvidia-smi命令详解---gpu
nvidia-smi是用来查看GPU使用情况的.我常用这个命令判断哪几块GPU空闲,但是最近的GPU使用状态让我很困惑,于是把nvidia-smi命令显示的GPU使用表中各个内容的具体含义解释一下. ...
- Bert代码详解(一)重点详细
这是bert的pytorch版本(与tensorflow一样的,这个更简单些,这个看懂了,tf也能看懂),地址:https://github.com/huggingface/pytorch-pretr ...
最新文章
- MFC中的字符串转换
- 釜底抽薪:掌控能源成本,根治企业能源损耗
- conda安装pytorch1.10.1+paddlepaddle-gpu2.2.1+cuda10.2+cudnn7.6.5
- UML学习-----类图
- python socket监听端口_Python 用socket模块实现检测端口和检测web服务
- 猎豹移动傅盛:区块链将重塑整个社会关系,CEO恐将职位不保
- spark hive 结合处理 把多行变成多列
- 使用SaltStack安装JBoss
- SM2算法全套(基于GMSSL)
- 高频电子线路实验箱QY-JXSY25
- python抢优惠券程序_python3 优惠券查询GUI程序
- web百度离线地图开发(详细教程)2019
- slam 直接法(七)
- Android:BroadCast Receiver
- Source Code Chain(SCC):基于区块链的人工智能软件工程项目
- 如何修改树莓派系统时间
- 《Nature-Inspired Metaheuristic Algorithms》—— Random Walk
- 用lisp语言写一段cad提取坐标代码
- SSL连接dh key too small
- 第四十八篇 安规测试
热门文章
- ABP(现代ASP.NET样板开发框架)系列之2、ABP入门教程
- 亲测_精简版Fiddler抓包手机端GET请求过程.
- Power BI for Office 365(八)共享查询
- 计划任务中allow和deny的优先级
- apache启动报错记录
- php warning: file_get_contents,Ecshop报警告:Warning: file_get_contents
- 怎么写脚本_直播脚本怎么写|请收下这份攻略
- 误删mysql数据库密码后,如何恢复密码
- mysql每秒57000_MySQL 性能:使用 MySQL 5.7 实现每秒 50 万查询
- MySQL单行函数分类