`
- 浏览:
163721 次
- 性别:
- 来自:
大连
-
Android编程之SparseArray<E>详解
最近编程时,发现一个针对HashMap<Integer, E>的一个提示:翻译过来就是:用SparseArray<E>来代替会有更好性能。那我们就来看看源码中SparseArray到底做了哪些事情:一、构造从构造方法我们可以看出,它和一般的List一样,可以预先设置容器大小,默认的大小是10:
-
publicSparseArray(){
-
this(10);
-
}
-
-
-
publicSparseArray(intinitialCapacity){
-
......
-
}
二、增它有两个方法可以添加键值对:
-
publicvoidput(intkey,Evalue)
-
publicvoidappend(intkey,Evalue)
在存储数据的时候,是采用了二分法方式,以下是它采用二分法的源码:
-
privatestaticintbinarySearch(int[]a,intstart,intlen,intkey){
-
inthigh=start+len;
-
intlow=start-1;
-
-
-
while(high-low>1){
-
intguess=(high+low)/2;
-
-
-
if(a[guess]<key){
-
low=guess;
-
continue;
-
}
-
high=guess;
-
}
-
-
-
if(high==start+len)
-
returnstart+len^0xFFFFFFFF;
-
if(a[high]==key){
-
returnhigh;
-
}
-
returnhigh^0xFFFFFFFF;
-
}
所以,它存储的数值都是按键值从小到大的顺序排列好的。三、查它有两个方法可以取值:
-
publicEget(intkey)
-
publicEget(intkey,EvalueIfKeyNotFound)
最后一个从传参的变量名就能看出,传入的是找不到的时候返回的值查看第几个位置的键:
查看第几个位置的值:
查看键所在位置,由于采用二分法查找键的位置,所以没有的话返回小于0的数值,而不是返回-1,这点要注意,返回的负数其实是表示它在哪个位置就找不到了,如果你存了5个,查找的键大于5个值的话,返回就是-6:
-
publicintindexOfKey(intkey)
查看值所在位置,没有的话返回-1:
-
publicintindexOfValue(Evalue)
四、删它有四个方法:
-
publicvoiddelete(intkey)
-
publicvoidremove(intkey)
但其实,delete和remove的效果是一样的,remove方法中调用了delete方法,remove源码:
-
publicvoidremove(intkey){
-
delete(key);
-
}
-
publicvoidremoveAt(intindex)
-
publicvoidclear()
最后一个就是清除全部五、改
-
publicvoidsetValueAt(intindex,Evalue)
-
publicvoidput(intkey,Evalue)
put方法还可以修改键值对,注意:如果键不存在,就会变为添加新键值对六、其他:SparseArray实现了Cloneable接口,还可以调用clone方法。小结:既然android系统建议我们用SparseArray<E>来代替HashMap<Integer, E>,那我们还是按它说的做吧。里面的一些方法,我在这里也已经剖析清楚了,希望能对你们有所帮助。
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
<br>C++的沉迷与爱恋 .txt<br>Curses编程简介.txt<br>Kingofark关于学习C++的50个观点 .txt<br>kingofark详解他的50个观点(上) .txt<br>kingofark详解他的50个观点(下) .txt<br>kingofark详解他的50个观点(中).txt...
C/C++语言经典实用趣味程序设计编程百例精解(1) <br>(详解收藏在)http://www.klfd.net.cn/?p=384 <br>1.绘制余弦曲线 <br>2.绘制余弦曲线和直线 <br>3.绘制圆 <br>4.歌星大奖赛 <br>5.求最大数 <br>6.高次方数的尾数...
ADO 的新增内容 <br>ADO 入门 <br>本地数据访问的解决方案 <br>基本的 ADO 编程模型 <br>ADO 编程模型详细资料 <br>使用对象的 ADO 编程模型 <br>ADO 对象模型总结 <br>远程数据访问的解决方案 <br>基本的 RDS 编程...
(8)代理服务器编程实例<br>Socks 5协议编程【\chap8\Socks5】<br>HTTP代理服务器【\chap8\HTTP代理服务】<br><br>(9)高级网络通信编程实例<br>串口通信编程实例【\chap9\SerialPort】<br>网络流量监控【\chap9\...
ToolBar工具栏控件的使用<br>动态建立主菜单选项<br>窗口界面的动态分隔...<br>详解Canvas生成渐变色窗口背景<br>WINAPM风格磁化窗口<br>软件封面的图片显示制作<br>实现图片的任意角度旋转<br>奇妙的拼图游戏<br>使用...
项目名称及描述(这是我从网上下载并整理的,非原创)<br>petshop4.0 详解之一(系统架构设计<br>petshop4.0 详解之二(数据访问层之数据库访问设计<br>petshop4.0 详解之三(PetShop数据访问层之消息处理)<br>petshop...
<br>DFS文件读写<br>网络爬虫之Spider<br>Java正则表达式的总结关键词: Java正则表达式 <br>批量上传--采集 (多个文件夹)<br>The Agile Way<br>hibernate mapping文件中的标记详解:关系标记<br>ANT 安装使用及...
包含<br> c函数速查.chm<br> c语言编程宝典之一.chm<br> c语言教室.chm<br> c语言开发实例详解.rar<br> mfc深入浅出.chm<br> tc图形函数详解.chm<br> turbo c 2.0 函数中文说明大全.txt<br> vc++ 编程指南.chm<br> ...
硬件开发规范化管理 5<br>第一节 硬件开发流程 5<br>§3.1.1 硬件开发流程文件介绍 5<br>§3.2.2 硬件开发流程详解 6<br>第二节 硬件开发文档规范 9<br>§2.2.1 硬件开发文档规范文件介绍 9<br>§2.2.2 硬件开发文档...
目录:<br>Overview ,<br>Basics ,<br>OTcl: The User Language <br>Simple Simulation Example <br>Event Scheduler <br>Network Components <br>Packet <br>Post Simulation ,<br>Trace Analysis Example <br>...
TCP/IP和Internet 8<br>2.1 一段历史 8<br>2.1.1 ARPANET 8<br>2.1.2 TCP/IP 9<br>2.1.3 国家科学基金会(NSF) 9<br>2.1.4 当今的Internet 12<br>2.2 RFC和标准化过程 12<br>2.2.1 获得RFC 13<br>2.2.2 RFC索引 13<br...
英文名<br>Microsoft.Network.Programming.for.Microsoft.Windows.1E<br>Microsoft.Network.Programming.for.Microsoft.Windows.2E<br><br>中文名<br>windows网络编程<br><br>作者<br>Anthony Jones and Jim Ohlund...
英文名<br>Microsoft.Network.Programming.for.Microsoft.Windows.1E<br>Microsoft.Network.Programming.for.Microsoft.Windows.2E<br><br>中文名<br>windows网络编程<br><br>作者<br>Anthony Jones and Jim Ohlund...
英文名<br>Microsoft.Network.Programming.for.Microsoft.Windows.1E<br>Microsoft.Network.Programming.for.Microsoft.Windows.2E<br><br>中文名<br>windows网络编程<br><br>作者<br>Anthony Jones and Jim Ohlund...
英文名<br>Microsoft.Network.Programming.for.Microsoft.Windows.1E<br>Microsoft.Network.Programming.for.Microsoft.Windows.2E<br><br>中文名<br>windows网络编程<br><br>作者<br>Anthony Jones and Jim Ohlund...
计算机图形学几何算法源码包,如下:<br><br> 目录 <br><br>㈠ 点的基本运算 <br>1. 平面上两点之间距离 1 <br>2. 判断两点是否重合 1 <br>3. 矢量叉乘 1 <br>4. 矢量点乘 2 <br>5. 判断点是否在线段上 2 <br>6. 求...
《嵌入式Linux系统开发技术详解—基于ARM》 作者:孙纪坤 华清远见嵌入式培训中心讲师<br><br>第三章、linux编程环境 <br><br>本章内容包括常用的Linux开发工具使用技巧和Linux编程技术。本章内容比Linux编程方面的...
<br>十九:学会xp的20个技巧 <br>二十:关于ping <br>二十一:windows非法操作详解 <br>二十二:注册表全解 <br>二十三:windows中有关网络的几命令 <br>二十四:NTFS和FAT分区的问答 <br>二十五:六大软件伤硬盘 ...
DOS系统概述<br> DOS系统启动<br> DOS文件名称<br> 目录与盘符<br>二、DOS常用命令<br> 目录操作命令……<br> 文件操作命令……<br> 功能操作命令……<br> 磁盘操作命令……<br><br>2.fdisk分区详解.chm<br> ...
第三卷的内容细节覆盖了当今TCP/IP编程人员和网络管理员必须熟练掌握的四个基本方面:<br><br> T/TCP (TCP事务协议),这是对TCP的扩展,使客户--服务器间的事务传输更快更有效和更可靠;<br><br> HTTP (超文本传送...