在CSDN开通博客专栏后如何发布文章及改进建议(图文)
来源:互联网 发布:php 运费设置源码 编辑:程序博客网 时间:2024/05/29 04:34
最近编程时,发现一个针对HashMap<Integer, E>的一个提示:
翻译过来就是:用SparseArray<E>来代替会有更好性能。
那我们就来看看源码中SparseArray到底做了哪些事情:
一、构造
从构造方法我们可以看出,它和一般的List一样,可以预先设置容器大小,默认的大小是10:
二、增
它有两个方法可以添加键值对:
在存储数据的时候,是采用了二分法方式,以下是它采用二分法的源码:
所以,它存储的数值都是按键值从小到大的顺序排列好的。
三、查
它有两个方法可以取值:
最后一个从传参的变量名就能看出,传入的是找不到的时候返回的值
查看第几个位置的键:
查看第几个位置的值:
查看键所在位置,由于采用二分法查找键的位置,所以没有的话返回小于0的数值,而不是返回-1,这点要注意,返回的负数其实是表示它在哪个位置就找不到了,如果你存了5个,查找的键大于5个值的话,返回就是-6:
查看值所在位置,没有的话返回-1:
四、删
它有四个方法:
但其实,delete和remove的效果是一样的,remove方法中调用了delete方法,remove源码:
最后一个就是清除全部
五、改
put方法还可以修改键值对,注意:如果键不存在,就会变为添加新键值对
六、其他:
SparseArray实现了Cloneable接口,还可以调用clone方法。
小结:既然android系统建议我们用SparseArray<E>来代替HashMap<Integer, E>,那我们还是按它说的做吧。里面的一些方法,我在这里也已经剖析清楚了,希望能对你们有所帮助。
翻译过来就是:用SparseArray<E>来代替会有更好性能。
那我们就来看看源码中SparseArray到底做了哪些事情:
一、构造
从构造方法我们可以看出,它和一般的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)
- public E valueAt(int index)
- public int indexOfKey(int key)
- public int indexOfValue(E value)
四、删
它有四个方法:
- public void delete(int key)
- public void remove(int key)
但其实,delete和remove的效果是一样的,remove方法中调用了delete方法,remove源码:
- public void remove(int key) {
- delete(key);
- }
- public void removeAt(int index)
- public void clear()
最后一个就是清除全部
五、改
- public void setValueAt(int index, E value)
- public void put(int key, E value)
put方法还可以修改键值对,注意:如果键不存在,就会变为添加新键值对
六、其他:
SparseArray实现了Cloneable接口,还可以调用clone方法。
小结:既然android系统建议我们用SparseArray<E>来代替HashMap<Integer, E>,那我们还是按它说的做吧。里面的一些方法,我在这里也已经剖析清楚了,希望能对你们有所帮助。
0 0
- 在CSDN开通博客专栏后如何发布文章及改进建议(图文)
- 在CSDN开通博客专栏后如何发布文章及改进建议(图文)
- 在CSDN开通博客专栏后如何发布文章(图文)
- 【转】如何使用离线博客发布工具发布CSDN的博客文章 - 山里来的鱼的专栏 - CSDN博客
- 如何注册CSDN账号及开通博客
- 第一篇博客---2017年12月后如何在CSDN平台上开通博客
- 【CSDN如何创建博客专栏?】
- 如何申请CSDN博客专栏
- 在CSDN开通了博客
- 第一次在CSDN开通博客
- csdn专栏开通说明
- 如何使用客户端来发布CSDN的博客文章?
- 如何使用Firefox ScribeFire发布CSDN的博客文章?
- Word2013文章如何直接发布到CSDN博客
- 发现(1)之如何申请CSDN博客专栏
- 赞一下CSDN新加的专栏管理的选择文章功能(图文)
- csdn如何转载别人的文章 - jiangping_zhu的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/jiangping_zhu/article/detail
- 如何使用live writer客户端来发布CSDN的博客文章?(转)
- unity3d 小心Instantiate的名字非你所要
- java中接口的作用是什么?
- shader编程学习(3)溶解
- SAP HANA分布式系统及高可用性(一)
- elasticsearch-2.0.0 搭建集群的最简易配置
- 在CSDN开通博客专栏后如何发布文章及改进建议(图文)
- binary_search函数用法
- JSP介绍,文件结构及执行过程
- 可自动关闭的JS消息提示框
- JProfiler远程监控
- T-code:SE01,SE93,SE43 经常使用的几个事务码
- shuffle() 函数
- iOS---UITextView: 响应键盘的 return 事件
- 未能加载文件或程序集 NHibernate.XmlSerializers