`
Darar
  • 浏览: 87818 次
  • 性别: 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的开销。
分享到:
评论

相关推荐

    Visual C++网络通信编程实用案例精选_9(全)

    &lt;br&gt;&lt;br&gt;目录介绍&lt;br&gt;第1章 Visual C++网络通信编程基础 1&lt;br&gt;1.1 Winsock1.1编程技术 1&lt;br&gt;1.1.1 Winsock的基本概念 1&lt;br&gt;1.1.2 Winsock的编程特点 2&lt;br&gt;1.1.3 Winsock基本的API 2&lt;br&gt;1.1.4 Winsock的...

    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语言学习必备

    包含&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; ...

    Oracle数据库Sql语句详解大全.pptx

    * 使用 BETWEEN 进行范围查询:SELECT &lt; 列名 &gt; FROM &lt; 表名 &gt; WHERE &lt; 列名 &gt; BETWEEN &lt; 数值 1 &gt; AND &lt; 数值 2 &gt; * 使用 IN 进行多值查询:SELECT &lt; 列名 &gt; FROM &lt; 表名 &gt; WHERE &lt; 列名 &gt; IN (&lt; 数值 1 &gt;, &lt; 数值 ...

    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...

    跟我学习注册表

    &lt;br&gt;&lt;br&gt;注册表基础知识 &lt;br&gt;注册表的由来 注册表的数据结构 &lt;br&gt;注册表的编辑 注册表的查找与修改 &lt;br&gt;注册表的内部结构 注册表的分析 &lt;br&gt; &lt;br&gt;注册表--根键详解 &lt;br&gt;HKEY_CLASSES_ROOT根键详解 &lt;br&gt;HKEY_USERS根...

    Struts所有标签详解

    里面包括&lt;html&gt;&lt;bean&gt;&lt;logic&gt;&lt;tiles&gt;&lt;nested&gt;&lt;br&gt;五组标签库的详细讲解,每个标签库都对应着&lt;br&gt;相应的例子(标签多的标签库有两个例子)。&lt;br&gt;另外还有国际化(文字国际化/图片国际化)、&lt;br&gt;表单验证,以及验证...

    孙卫琴《Tomcat与Java Web开发技术详解》培训讲义.rar

    孙卫琴《Tomcat与Java Web开发技术详解》培训讲义.rar&lt;br&gt;01__JavaWeb应用简介.pdf&lt;br&gt;02_Servlet技术.pdf&lt;br&gt;03_JSP技术.pdf&lt;br&gt;04_使用HTTP会话(Session).pdf&lt;br&gt;05_使用JavaBean.pdf&lt;br&gt;06_使用Servlet过滤器....

    TCP-IP详解卷3

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

    《精通Spring2.X企业应用开发详解》20-23

    动态语言支持&lt;br&gt;第5篇 展现层应用&lt;br&gt;第19章 Spring MVC之一&lt;br&gt;第20章 Spring MVC之二&lt;br&gt;第21章 集成其他Web框架&lt;br&gt;第6篇 其他&lt;br&gt;第22章 Spring应用的测试&lt;br&gt;第23章 Spring工具类盘点&lt;br&gt;附录A 各种数据库连接...

    Zmodem上传协议详解

    其中,`&lt;PAD&gt;`是填充字符,`&lt;ZDLE&gt;`是数据链路控制字符,`&lt;FormatType&gt;`表示包格式类型,`&lt;PacketType2&gt;`表示包类型(ZRQINIT),`&lt;Flags8&gt;`为状态标志,`&lt;CRCCheckBytes4&gt;`为CRC校验码。 ##### 2. 接收初始化响应...

    JS获取元素多层嵌套思路详解

    如果一段html嵌套过多,在js中获取还是比较麻烦的,我写了几套方案,大家可以参考参考,如果你有好的方法,也分享出来...&lt;span&gt;span&lt;/span&gt; &lt;div&gt; &lt;span&gt;span&lt;/span&gt; &lt;a&gt; &lt;span&gt;1&lt;/span&gt; &lt;/a&gt; &lt;/div&gt; &lt;div&gt; &lt;a&gt; &lt;spa

    常用javascript整理

    1.JavaScript的数值处理对象学习 .txt&lt;br&gt;2.JavaScript的系统函数学习 .txt&lt;br&gt;3.js中用于对象的语句——with和for...in语句学习专题.txt&lt;br&gt;4.smallSoftkey小软键盘,大键盘&lt;br&gt;5.window.open参数详解 .txt&lt;br&gt;6....

    ARM应用系统开发详解

    &lt;br&gt;本书在全面介绍 ARM 处理器的体系结构、编程模型、指令系统和开发工具的同时,以&lt;br&gt;Samsung 公司的一款基于以太网系统的 ARM 处理器-S3C4510B 为核心,详细讲解系统的&lt;br&gt;设计、调试,以及相关的软件设计和...

    VB 各种控件(个人收藏30多种,还有详细的使用介绍)

    超级的列表框,你一定不会失望(137KB)&lt;END&gt;&lt;END&gt; 2, axtree.zip 用惯了treeview控件的朋友可以试一试这款axtree控件,它增添了更多的控制(129KB)&lt;END&gt; 3,richedit 利用RichText实现的编辑器,提供了修改字体,打印...

    mybatis关联查询问题(一对多、多对一)

    例如,`&lt;if&gt;`、`&lt;choose&gt;`、`&lt;when&gt;`、`&lt;otherwise&gt;`等元素可以根据条件改变SQL结构。 综上所述,理解和掌握Mybatis中的关联查询对于开发高效、灵活的博客系统至关重要。这涉及到数据库设计、SQL编写、Mybatis配置...

    Android中Glide获取图片Path、Bitmap用法详解

    软件开发网在此之前给大家介绍过...Glide.with(mContext).load(url).asBitmap().into(new SimpleTarget&lt;Bitmap&gt;() { @Override public void onResourceReady(Bitmap resource, GlideAnimation&lt;? super Bitmap&gt; gl

    指令字典(编程字典)

    &lt;br&gt; 本软件的主要特点:&lt;br&gt;1、编程语言种类全。包含了目前较为流行的多种语言,如Turboc、VC++6.0、VFP6.0、VB6.0、DELPHI、JAVA、80X86汇编和WIN32汇编。&lt;br&gt;2、具用中文查询功能。用户可根据自己需要输入所需...

    FLASH 高级技巧大揭密

    &lt;br&gt;本软件集教学制作演示详解于一体,可以说是日常制作FLASH时的工具书,只&lt;br&gt;要打开本软件查一查就可象一部新华字典一样地方便,并且语法讲解清晰,不&lt;br&gt;会产生读不懂的死角,实例内容丰富详尽,每个实例不会太...

    Android编程简易实现XML解析的方法详解

    本文实例讲述了Android编程简易实现XML解析的方法。分享给大家供大家参考,具体如下: 首先创建在Android工程中创建一个Assets文件夹 app/src/main/assets 在这里添加一个名为 data.xml的文件,然后编辑这个文件,...

Global site tag (gtag.js) - Google Analytics