网站空间多大合适,软件开发培训机构网课,学设计去哪个培训好,网站建设内容存储最近编程时#xff0c;发现一个针对HashMapInteger, E的一个提示#xff1a; 翻译过来就是#xff1a;用SparseArrayE来代替会有更好性能。那我们就来看看源码中SparseArray到底做了哪些事情#xff1a;一、构造从构造方法我们可以看出#xff0c;它和一般… 最近编程时发现一个针对HashMapInteger, E的一个提示 翻译过来就是用SparseArrayE来代替会有更好性能。那我们就来看看源码中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) 查看键所在位置由于采用二分法查找键的位置所以没有的话返回小于0的数值而不是返回-1这点要注意返回的负数其实是表示它在哪个位置就找不到了如果你存了5个查找的键大于5个值的话返回就是-6 public int indexOfKey(int key)
查看值所在位置没有的话返回-1 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方法。