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