SparseArrayE详解
SparseArray<E> 是官方推薦的用來替代?HashMap<Integer, E> 的一個工具類,相比來說有著更好的性能(其核心是折半查找函數(binarySearch))。
通過源碼來看下SparseArray<E>的一些使用特點:
-------------------------------------------------------------------------------------------------------
1、SparseArray可以預先設置容器大小,默認是10
/*** Creates a new SparseArray containing no mappings.*/public SparseArray() {this(10);}?
-------------------------------------------------------------------------------------------------------
2、增刪改查
(1)兩種添加數據的方法
public void put(int key, E value) public void append(int key, E value)其中append()內部調用了put()
put()內部又使用了二分法存儲數據,由此可見:它存儲的數值都是按鍵值從小到大的順序排列好的
static int binarySearch(int[] array, int size, int value) {int lo = 0;int hi = size - 1;while (lo <= hi) {final int mid = (lo + hi) >>> 1;final int midVal = array[mid];if (midVal < value) {lo = mid + 1;} else if (midVal > value) {hi = mid - 1;} else {return mid; // value found }}return ~lo; // value not present}?
(2)四種刪除數據的方法
--前兩種
public void delete(int key) public void remove(int key)兩者作用是相同的,沒區別,因為remove()內部就直接調用了delete()
/** * Alias for {@link #delete(int)}. */ public void remove(int key) {delete(key); }--后兩種
public void removeAt(int index) public void clear()一個是刪除指定坐標的數據
一個是清空所有的數據
?
(3)兩種修改數據的方法
public void setValueAt(int index, E value) public void put(int key, E value)這里put()方法可能會有疑惑,它不是添加數據的么,怎么也可以修改數據了?
看下put()部分源碼:
int i = ContainerHelpers.binarySearch(mKeys, mSize, key);if (i >= 0) {mValues[i] = value;} else {先是查找這個key是不是存在,返回一個整型,如果i>=0,說明存在,直接修改值 ,否則執行else()添加數據
?
(4)查詢獲取數據的方法
--獲取鍵對應的值
public E get(int key) public E get(int key, E valueIfKeyNotFound)很簡單,獲取某個鍵對應的值,兩個參數的方法的第二個參數當然就是沒有這個key鍵,返回的默認值
?
--根據坐標獲取該位置的鍵
public int keyAt(int index)?
--根據坐標獲取該位置的值
public E valueAt(int index)?
----------------------------------------------
--查看鍵所在的位置
public int indexOfKey(int key)--查看值所在的位置
public int indexOfValue(E value)這兩個方法返回一個整型數值,往常來說,返回-1代表不存在。
但是這兩個方法返回的值不確定,但查詢不到的話返回的值還是一個負數。判斷是否小于0即可
?
-------------------------------------------------------------------------------------------------------
相關知識:
Java集合框架
?
總結
以上是生活随笔為你收集整理的SparseArrayE详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 面向连接的套接字通信工作流程
- 下一篇: CCNP学习笔记15-RSTP