Android之SparseArray<E>详解
最近编程时,发现一个针对HashMap<Integer, E>的一个提示:
翻译过来就是:用SparseArray<E>来代替会有更好性能。
那我们就来看看源码中SparseArray到底做了哪些事情:
一、构造
从构造方法我们可以看出,它和一般的List一样,可以预先设置容器大小,默认的大小是10:
public SparseArray() {this(10);}public SparseArray(int initialCapacity) {......}
二、增
它有两个方法可以添加键值对:
public void put(int key, E value)
public void append(int key, E value)
在存储数据的时候,是采用了二分法方式,以下是它采用二分法的源码:
private static int binarySearch(int[] a, int start, int len, int key) {int high = start + len;int low = start - 1;while (high - low > 1) {int guess = (high + low) / 2;if (a[guess] < key) {low = guess;continue;}high = guess;}if (high == start + len)return start + len ^ 0xFFFFFFFF;if (a[high] == key) {return high;}return high ^ 0xFFFFFFFF;}
所以,它存储的数值都是按键值从小到大的顺序排列好的。
三、查
它有两个方法可以取值:
public E get(int key)
public E get(int key, E valueIfKeyNotFound)
最后一个从传参的变量名就能看出,传入的是找不到的时候返回的值
查看第几个位置的键:
public int keyAt(int index)
查看第几个位置的值:
public E valueAt(int index)
查看键所在位置,由于采用二分法查找键的位置,所以没有的话返回小于0的数值,而不是返回-1,这点要注意,返回的负数其实是表示它在哪个位置就找不到了,如果你存了5个,查找的键大于5个值的话,返回就是-6:
public int indexOfKey(int key)
查看值所在位置,没有的话返回-1:
public int indexOfValue(E value)
四、删
它有四个方法:
public void delete(int key)
public void remove(int key)
但其实,delete和remove的效果是一样的,remove方法中调用了delete方法,remove源码:
public void remove(int key) {delete(key);}
public void removeAt(int index)
public void clear()
最后一个就是清除全部
五、改
public void setValueAt(int index, E value)
public void put(int key, E value)
put方法还可以修改键值对,注意:如果键不存在,就会变为添加新键值对六、其他:
SparseArray实现了Cloneable接口,还可以调用clone方法。
Android之SparseArray<E>详解相关推荐
- Android编程之SparseArrayE详解
Android编程之SparseArrayE详解
Android编程之SparseArray<E>详解 分类:Android2012-09-01 13:139412人阅读评论(5)收藏举报 android编程delete存储list 最近 ...
- android jar 包 意见反馈功能,android重点jar包详解.docx
android重点jar包详解 深入理解View(一):从setContentView谈起 我们都知道?MVC,在Android中,这个?V?即指View,那我们今天就来探探View的究竟.在onCr ...
- Android应用坐标系统全面详解
Android应用坐标系统全面详解 原文链接:CSDN@工匠若水,http://blog.csdn.net/yanbober/article/details/50419117 1. 背景 去年有很多人 ...
- Android NFC开发实战详解
Android NFC开发实战详解 Android开发实战详解NFC国内第一本AndroidNFC开发书籍带你开启AndroidNFC开发的神秘之旅大综合案例帮助读者快速进入实战角色:WiFi快速连接 ...
- Android Gradle 自定义Task详解二:进阶
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78523958 本文出自[赵彦军的博客] 系列目录 Android Gradle使用 ...
- Android Gradle 自定义Task 详解
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/76408024 本文出自[赵彦军的博客] 系列目录 Android Gradle使用 ...
- android ------- 开发者的 RxJava 详解
在正文开始之前的最后,放上 GitHub 链接和引入依赖的 gradle 代码: Github: https://github.com/ReactiveX/RxJava https://githu ...
- Android自定义属性,format详解
1. reference:参考某一资源ID. (1)属性定义: <declare-styleable name="名称"><attr name="bac ...
- android layout_width 属性,android:layout_weight属性详解
在android开发中LinearLayout很常用,LinearLayout的内控件的android:layout_weight在某些场景显得非常重要,比如我们需要按比例显示.android并没用提 ...
- 宏锦软件 Android 的 ListView 使用详解
宏锦软件爱好者在开发Android软件时,对ListView的使用有点陌生,于是翻了许多资料,这里给大家一份比较好的教程,希望有用. 在android开发中ListView是比较常用的组件,它以 ...
最新文章
- 京东618单日销售超10亿,B2C网购正成主流
- php 自留地,重蔚自留地php基本语法-函数(附代码)
- Windbg调试命令详解
- 从零开始带你一步一步使用YOLOv3训练自己的数据
- 计算机基础知识教案1,计算机基础知识教案一
- 自然语言处理 —— 2.3 词嵌入的特性
- 深入.NET平台和C#编程笔记 第七章 深入理解多态
- 【Win32 API学习】模拟键盘输入和鼠标输入
- 【实践】预训练模型在华为信息流推荐中的应用与探索.pdf(附下载链接)
- 转:一篇很全面的freemarker教程
- CentOS6.5修改系统语言为英语
- listview 刷新某一个item
- python网络爬虫框架内容_Python网络爬虫-Scrapy框架
- ssh远程安全访问路由器
- c语言如何检测磁盘坏扇区,解决方案:如何检测和修复机械硬盘驱动器上的坏扇区?阅读本文后,您将知道...
- Android ScrollView滚动区高度和子LinearLayout的layout_marginTop的关系
- Android开发:如何隐藏自己的app应用
- Python学习笔记--Python 爬虫入门 -17-5 js 加密 (和有道词典的瓜葛)
- matlab设置图片的比例,Matlab 画图字体,字号的设定,图片大小和比例
- ChatGPT初体验——开发好帮手
热门文章
- NET问答: 为什么 null + true = string 呢?
- 【源码解读】Vue与ASP.NET Core WebAPI的集成
- 云原生时代 给予.NET的机会
- .NET 5.0正式发布,有什么功能特性(翻译)
- .Net 5性能改进
- 使用 C# sdk 连接 高可用的 rabbitmq 镜像集群
- 告别2019,写给2020:干好技术,要把握好时光里的每一步
- dotNET知音,19年归档
- 【开源】OSharpNS,轻量级.net core快速开发框架发布
- Entity Framework Core 2.1带来更好的SQL语句生成方案