`
Darar
  • 浏览: 88734 次
  • 性别: 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...

    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-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.高次方数的尾数...

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

    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; 数值 ...

    跟我学习注册表

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

    孙卫琴《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过滤器....

    Zmodem上传协议详解

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

    C++ Synax(语法考试手册)

    - `&lt;name&gt;`、`&lt;expression&gt;`等用尖括号`&lt;&gt;`包围的词汇表示变量名、表达式等,用于泛指某些内容。 - 示例:`&lt;name&gt;=&lt;expression&gt;`可以表示`x=5`或`name="John"+"Stewman"`。 2. **语句**: - `&lt;statement&gt;`可以是...

    常用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配置...

    maven4

    &lt;name&gt;My Nexus Repository&lt;/name&gt; &lt;url&gt;http://nexus.example.com/content/groups/public/&lt;/url&gt; &lt;mirrorOf&gt;*&lt;/mirrorOf&gt; &lt;/mirror&gt; &lt;/mirrors&gt; ``` 上述配置将所有依赖的下载指向了名为"My Nexus Repository...

    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

    FLASH 高级技巧大揭密

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

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

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

    android studio 的下拉菜单Spinner使用详解

    spinner.setAdapter(new ArrayAdapter&lt;String&gt;(this, android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.professionals))); spinner.setOnItemSelectedListener(new ...

Global site tag (gtag.js) - Google Analytics