`
Darar
  • 浏览: 85204 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android编程之SparseArray<E>详解

 
阅读更多
一、构造
从构造方法我们可以看出,它和一般的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)

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

插入、查找和删除操作的效率都是log2(n)。 在插入的时候还要对整个数组进行移动,代价也是不低的。 对HashMap来说,它更省空间和省了auto-boxing的开销。
分享到:
评论

相关推荐

    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网络编程中英文版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网络编程中英文版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网络编程中英文版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网络编程中英文版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