Android之工具类说明与帮助
来源:互联网 发布:星际争霸2 mac 编辑:程序博客网 时间:2024/05/18 10:24
1.SparseIntArray类
SparseIntArray类是一个Map,主要是存储key为整数,value也为整数的map.但是比使用Map<Integer,Integer>要高效很多.因为SparseIntArray中存放的是经过排序后的map,查换使用了二叉树折半查找,效率比map要高很多.查看源码可以看见,实现是将Key与Value分别用2个int[]实现,而且查找又使用了折半查找,所以效率比map高很多.so 如果用到Map<Integer,Integer>时,可以用SparseIntArray来代替,提高效率.
工作原理,首先0初始化一个为长度10的数组但是插入的时候,首先判断数组里有无key,如果有则直接将key对应的value覆盖,如果没有key则当前size是否大于20,如果大于20则重新分配一个更长的数组,然后将比key大的值的keys,values全部向后移动一位,然后将key与value插入到正确的位置.
private static int binarySearch(int[] a, int start, int len, int key) {//折半查找相当的key对应的位置, int high = start + len, low = start - 1, guess; while (high - low > 1) { guess = (high + low) / 2; if (a[guess] < key) low = guess; else high = guess; } if (high == start + len) return ~(start + len); else if (a[high] == key) return high; else return ~high; }}
public void put(int key, int value) { int i = binarySearch(mKeys, 0, mSize, key); if (i >= 0) { mValues[i] = value; } else { i = ~i; if (mSize >= mKeys.length) { int n = ArrayUtils.idealIntArraySize(mSize + 1); int[] nkeys = new int[n]; int[] nvalues = new int[n]; // Log.e("SparseIntArray", "grow " + mKeys.length + " to " + n); System.arraycopy(mKeys, 0, nkeys, 0, mKeys.length); System.arraycopy(mValues, 0, nvalues, 0, mValues.length); mKeys = nkeys; mValues = nvalues; } if (mSize - i != 0) { // Log.e("SparseIntArray", "move " + (mSize - i)); System.arraycopy(mKeys, i, mKeys, i + 1, mSize - i); System.arraycopy(mValues, i, mValues, i + 1, mSize - i); } mKeys[i] = key; mValues[i] = value; mSize++; } }
0 0
- Android之工具类说明与帮助
- Android各种帮助开发工具
- CIL的帮助类说明
- Android-MonkeyRunner 工具说明
- Android 简单工具说明
- oracle工具之autotrace的开启与选项说明
- Android 自动化测试工具Robotium 之Solo类的详细说明
- android 自动化测试工具Robotium 之Solo类的详细说明
- android自动化工具之--Monkey log分析说明
- android之BaseColumns类说明
- Collections工具类/帮助类
- Android之工具类
- jQuery帮助之工具 浏览器 jQuery.support
- Android帮助文档(第二部分)开发工具
- Android ViewHolder 生成工具(帮助生成findviewbyid)
- Android常用工具类之与网络相关的工具类
- Android APP反编译之开篇与工具
- Android 权限帮助类
- 黑马程序员_java GUI编程
- 控制反转
- Redis介绍
- iOS 手势及触摸
- 成本要素类别
- Android之工具类说明与帮助
- 心灵的碎片
- maven 装载本地jar
- [Java] 解决异常:“The last packet sent successfully to the server was 0 milliseconds ago.
- 集合框架__【Map集合】【keySet】【entrySet】【Map.Entry】
- c/c++创建Windows服务
- JavaScript社区开发者调查:服务端JS盛行,Backbone.js使用最多
- Monkey测试简介
- JSP中out对象的方法总结