`
djun100
  • 浏览: 163721 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

Android编程之SparseArray<E>详解

 
阅读更多
最近编程时,发现一个针对HashMap<Integer, E>的一个提示:


翻译过来就是:用SparseArray<E>来代替会有更好性能。
那我们就来看看源码中SparseArray到底做了哪些事情:

一、构造
从构造方法我们可以看出,它和一般的List一样,可以预先设置容器大小,默认的大小是10:
  1. publicSparseArray(){
  2. this(10);
  3. }
  4. publicSparseArray(intinitialCapacity){
  5. ......
  6. }


二、增
它有两个方法可以添加键值对:
  1. publicvoidput(intkey,Evalue)
  2. publicvoidappend(intkey,Evalue)



在存储数据的时候,是采用了二分法方式,以下是它采用二分法的源码:
  1. privatestaticintbinarySearch(int[]a,intstart,intlen,intkey){
  2. inthigh=start+len;
  3. intlow=start-1;
  4. while(high-low>1){
  5. intguess=(high+low)/2;
  6. if(a[guess]<key){
  7. low=guess;
  8. continue;
  9. }
  10. high=guess;
  11. }
  12. if(high==start+len)
  13. returnstart+len^0xFFFFFFFF;
  14. if(a[high]==key){
  15. returnhigh;
  16. }
  17. returnhigh^0xFFFFFFFF;
  18. }



所以,它存储的数值都是按键值从小到大的顺序排列好的。


三、查
它有两个方法可以取值:
  1. publicEget(intkey)
  2. publicEget(intkey,EvalueIfKeyNotFound)
最后一个从传参的变量名就能看出,传入的是找不到的时候返回的值


查看第几个位置的键:
  1. publicintkeyAt(intindex)
查看第几个位置的值:
  1. publicEvalueAt(intindex)
查看键所在位置,由于采用二分法查找键的位置,所以没有的话返回小于0的数值,而不是返回-1,这点要注意,返回的负数其实是表示它在哪个位置就找不到了,如果你存了5个,查找的键大于5个值的话,返回就是-6:
  1. publicintindexOfKey(intkey)
查看值所在位置,没有的话返回-1:
  1. publicintindexOfValue(Evalue)


四、删
它有四个方法:
  1. publicvoiddelete(intkey)
  2. publicvoidremove(intkey)

但其实,delete和remove的效果是一样的,remove方法中调用了delete方法,remove源码:
  1. publicvoidremove(intkey){
  2. delete(key);
  3. }

  1. publicvoidremoveAt(intindex)
  2. publicvoidclear()

最后一个就是清除全部


五、改
  1. publicvoidsetValueAt(intindex,Evalue)
  2. publicvoidput(intkey,Evalue)

put方法还可以修改键值对,注意:如果键不存在,就会变为添加新键值对


六、其他:
SparseArray实现了Cloneable接口,还可以调用clone方法。


小结:既然android系统建议我们用SparseArray<E>来代替HashMap<Integer, E>,那我们还是按它说的做吧。里面的一些方法,我在这里也已经剖析清楚了,希望能对你们有所帮助。
分享到:
评论

相关推荐

    C++文摘

    &lt;br&gt;C++的沉迷与爱恋 .txt&lt;br&gt;Curses编程简介.txt&lt;br&gt;Kingofark关于学习C++的50个观点 .txt&lt;br&gt;kingofark详解他的50个观点(上) .txt&lt;br&gt;kingofark详解他的50个观点(下) .txt&lt;br&gt;kingofark详解他的50个观点(中).txt...

    C-C++语言趣味程序设计编程百例精解

    C/C++语言经典实用趣味程序设计编程百例精解(1) &lt;br&gt;(详解收藏在)http://www.klfd.net.cn/?p=384 &lt;br&gt;1.绘制余弦曲线 &lt;br&gt;2.绘制余弦曲线和直线 &lt;br&gt;3.绘制圆 &lt;br&gt;4.歌星大奖赛 &lt;br&gt;5.求最大数 &lt;br&gt;6.高次方数的尾数...

    asp教程

    ADO 的新增内容 &lt;br&gt;ADO 入门 &lt;br&gt;本地数据访问的解决方案 &lt;br&gt;基本的 ADO 编程模型 &lt;br&gt;ADO 编程模型详细资料 &lt;br&gt;使用对象的 ADO 编程模型 &lt;br&gt;ADO 对象模型总结 &lt;br&gt;远程数据访问的解决方案 &lt;br&gt;基本的 RDS 编程...

    C++网络编程实例四

    (8)代理服务器编程实例&lt;br&gt;Socks 5协议编程【\chap8\Socks5】&lt;br&gt;HTTP代理服务器【\chap8\HTTP代理服务】&lt;br&gt;&lt;br&gt;(9)高级网络通信编程实例&lt;br&gt;串口通信编程实例【\chap9\SerialPort】&lt;br&gt;网络流量监控【\chap9\...

    Delphi7 编程 100 实例

    ToolBar工具栏控件的使用&lt;br&gt;动态建立主菜单选项&lt;br&gt;窗口界面的动态分隔...&lt;br&gt;详解Canvas生成渐变色窗口背景&lt;br&gt;WINAPM风格磁化窗口&lt;br&gt;软件封面的图片显示制作&lt;br&gt;实现图片的任意角度旋转&lt;br&gt;奇妙的拼图游戏&lt;br&gt;使用...

    petshop 4详解

    项目名称及描述(这是我从网上下载并整理的,非原创)&lt;br&gt;petshop4.0 详解之一(系统架构设计&lt;br&gt;petshop4.0 详解之二(数据访问层之数据库访问设计&lt;br&gt;petshop4.0 详解之三(PetShop数据访问层之消息处理)&lt;br&gt;petshop...

    java文集

    &lt;br&gt;DFS文件读写&lt;br&gt;网络爬虫之Spider&lt;br&gt;Java正则表达式的总结关键词: Java正则表达式 &lt;br&gt;批量上传--采集 (多个文件夹)&lt;br&gt;The Agile Way&lt;br&gt;hibernate mapping文件中的标记详解:关系标记&lt;br&gt;ANT 安装使用及...

    c语言学习必备

    包含&lt;br&gt; c函数速查.chm&lt;br&gt; c语言编程宝典之一.chm&lt;br&gt; c语言教室.chm&lt;br&gt; c语言开发实例详解.rar&lt;br&gt; mfc深入浅出.chm&lt;br&gt; tc图形函数详解.chm&lt;br&gt; turbo c 2.0 函数中文说明大全.txt&lt;br&gt; vc++ 编程指南.chm&lt;br&gt; ...

    硬件工程师手册(全)

    硬件开发规范化管理 5&lt;br&gt;第一节 硬件开发流程 5&lt;br&gt;§3.1.1 硬件开发流程文件介绍 5&lt;br&gt;§3.2.2 硬件开发流程详解 6&lt;br&gt;第二节 硬件开发文档规范 9&lt;br&gt;§2.2.1 硬件开发文档规范文件介绍 9&lt;br&gt;§2.2.2 硬件开发文档...

    NS By Example

    目录:&lt;br&gt;Overview ,&lt;br&gt;Basics ,&lt;br&gt;OTcl: The User Language &lt;br&gt;Simple Simulation Example &lt;br&gt;Event Scheduler &lt;br&gt;Network Components &lt;br&gt;Packet &lt;br&gt;Post Simulation ,&lt;br&gt;Trace Analysis Example &lt;br&gt;...

    TCP-IP技术大全

    TCP/IP和Internet 8&lt;br&gt;2.1 一段历史 8&lt;br&gt;2.1.1 ARPANET 8&lt;br&gt;2.1.2 TCP/IP 9&lt;br&gt;2.1.3 国家科学基金会(NSF) 9&lt;br&gt;2.1.4 当今的Internet 12&lt;br&gt;2.2 RFC和标准化过程 12&lt;br&gt;2.2.1 获得RFC 13&lt;br&gt;2.2.2 RFC索引 13&lt;br...

    windows网络编程中英文版part3

    英文名&lt;br&gt;Microsoft.Network.Programming.for.Microsoft.Windows.1E&lt;br&gt;Microsoft.Network.Programming.for.Microsoft.Windows.2E&lt;br&gt;&lt;br&gt;中文名&lt;br&gt;windows网络编程&lt;br&gt;&lt;br&gt;作者&lt;br&gt;Anthony Jones and Jim Ohlund...

    windows网络编程中英文版part2

    英文名&lt;br&gt;Microsoft.Network.Programming.for.Microsoft.Windows.1E&lt;br&gt;Microsoft.Network.Programming.for.Microsoft.Windows.2E&lt;br&gt;&lt;br&gt;中文名&lt;br&gt;windows网络编程&lt;br&gt;&lt;br&gt;作者&lt;br&gt;Anthony Jones and Jim Ohlund...

    windows网络编程中英文版part4

    英文名&lt;br&gt;Microsoft.Network.Programming.for.Microsoft.Windows.1E&lt;br&gt;Microsoft.Network.Programming.for.Microsoft.Windows.2E&lt;br&gt;&lt;br&gt;中文名&lt;br&gt;windows网络编程&lt;br&gt;&lt;br&gt;作者&lt;br&gt;Anthony Jones and Jim Ohlund...

    windows网络编程中英文版part1

    英文名&lt;br&gt;Microsoft.Network.Programming.for.Microsoft.Windows.1E&lt;br&gt;Microsoft.Network.Programming.for.Microsoft.Windows.2E&lt;br&gt;&lt;br&gt;中文名&lt;br&gt;windows网络编程&lt;br&gt;&lt;br&gt;作者&lt;br&gt;Anthony Jones and Jim Ohlund...

    开放源码的计算机图形学几何算法包

    计算机图形学几何算法源码包,如下:&lt;br&gt;&lt;br&gt; 目录 &lt;br&gt;&lt;br&gt;㈠ 点的基本运算 &lt;br&gt;1. 平面上两点之间距离 1 &lt;br&gt;2. 判断两点是否重合 1 &lt;br&gt;3. 矢量叉乘 1 &lt;br&gt;4. 矢量点乘 2 &lt;br&gt;5. 判断点是否在线段上 2 &lt;br&gt;6. 求...

    linux编程环境

    《嵌入式Linux系统开发技术详解—基于ARM》 作者:孙纪坤 华清远见嵌入式培训中心讲师&lt;br&gt;&lt;br&gt;第三章、linux编程环境 &lt;br&gt;&lt;br&gt;本章内容包括常用的Linux开发工具使用技巧和Linux编程技术。本章内容比Linux编程方面的...

    网管教程:从入门到精通(软件篇)

    &lt;br&gt;十九:学会xp的20个技巧 &lt;br&gt;二十:关于ping &lt;br&gt;二十一:windows非法操作详解 &lt;br&gt;二十二:注册表全解 &lt;br&gt;二十三:windows中有关网络的几命令 &lt;br&gt;二十四:NTFS和FAT分区的问答 &lt;br&gt;二十五:六大软件伤硬盘 ...

    DOS学习手册大全(入门-进阶+软件)

    DOS系统概述&lt;br&gt; DOS系统启动&lt;br&gt; DOS文件名称&lt;br&gt; 目录与盘符&lt;br&gt;二、DOS常用命令&lt;br&gt; 目录操作命令……&lt;br&gt; 文件操作命令……&lt;br&gt; 功能操作命令……&lt;br&gt; 磁盘操作命令……&lt;br&gt;&lt;br&gt;2.fdisk分区详解.chm&lt;br&gt; ...

    TCP-IP详解卷3

    第三卷的内容细节覆盖了当今TCP/IP编程人员和网络管理员必须熟练掌握的四个基本方面:&lt;br&gt;&lt;br&gt; T/TCP (TCP事务协议),这是对TCP的扩展,使客户--服务器间的事务传输更快更有效和更可靠;&lt;br&gt;&lt;br&gt; HTTP (超文本传送...

Global site tag (gtag.js) - Google Analytics