SparseArray

SparseArray是android提供的一個工具類,它可以用來替代hashmap進行對象的存儲,其內部實現(xiàn)了一個矩陣壓縮算法,很適合存儲稀疏矩陣的。

PS:support包中還提供了兼容的類SparseArrayCompat不知道是干什么的。

針對源碼的詳細分析:http://stormzhang.com/android/2013/08/01/android-use-sparsearray-for-performance-optimization/

一、和Hashmap的對比

既然android推薦用這個東西,自然有用它的道理。其內部實現(xiàn)了壓縮算法,可以進行矩陣壓縮,大大減少了存儲空間,節(jié)約內存。此外它的查找算法是二分法,提高了查找的效率。

替換原則:

1>

如果用到了:HashMaphashMap=newHashMap();

可以替換為:SparseArraysparseArray=newSparseArray();

2>

如果用到了:HashMap hashMap = new HashMap

可以替換為:SparseBooleanArray array = new SparseBooleanArray();

3>

如果用到了:HashMap hashMap = new HashMap

可以替換為:SparseIntArray array = new SparseIntArray();

二、用法

既然是鍵值對那么就有增刪改查,但要記得先初始化:

Button btn =null;//測試view,無意義Button btn02 =null;//測試view,表示新增的對象finalintKEY = 1;/** SparseArray指的是稀疏數(shù)組(Sparse

* array),所謂稀疏數(shù)組就是數(shù)組中大部分的內容值都未被使用(或都為零),在數(shù)組中僅有少部分的空間使用

* 。因此造成內存空間的浪費,為了節(jié)省內存空間,并且不影響數(shù)組中原有的內容值,我們可以采用一種壓縮的方式來表示稀疏數(shù)組的內容。*/SparseArray array =newSparseArray();

2.1?增加數(shù)據(jù)

/*增加數(shù)據(jù)*///public void put(int key, E value) {}array.put(KEY, btn);//public void append(int key, E value){}array.append(KEY, btn);

2.2 修改數(shù)據(jù)

/*修改數(shù)據(jù)*///在put數(shù)據(jù)之前,會先查找要put的數(shù)據(jù)是否已經(jīng)存在,如果存在就是修改,不存在就添加。//public void put(int key, E value)array.put(KEY, btn);//public void setValueAt(int index, E value)array.setValueAt(KEY, btn02);

2.3 查找數(shù)據(jù)

/*查找數(shù)據(jù)*///public E get(int key)array.get(KEY);//public E get(int key, E valueIfKeyNotFound)//其中get(int key)也只是調用了 get(int key,E valueIfKeyNotFound),最后一個從傳參的變量名就能看出,傳入的是找不到的時候返回的值.get(int key)當找不到的時候,默認返回null。array.get(KEY, btn);//如果這個key找不到value,那么就返回第二個參數(shù)。和default value一樣

2.4 通過位置,查找鍵的值

//查看第幾個位置的鍵://public int keyAt(int index)array.keyAt(1);//如果找不到就返回-1

2.5 通過位置,查找值

//查看第幾個位置的值://public E valueAt(int index)array.valueAt(1);//查看值所在位置,沒有的話返回-1://public int indexOfValue(E value)array.indexOfValue(btn);

三、測試代碼

packagecom.kale.pictest;importandroid.app.Activity;importandroid.os.Bundle;importandroid.util.Log;importandroid.util.SparseArray;importandroid.util.SparseBooleanArray;importandroid.view.View;importandroid.widget.Button;/***@author:

* @description? :

* @web :http://stormzhang.com/android/2013/08/01/android-use-sparsearray-for-performance-optimization/* @date? :2015年1月19日*/publicclassMainActivityextendsActivity {

@OverrideprotectedvoidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);intmaxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);

Log.d("TAG", "Max memory is " + maxMemory + "KB");

Button btn=null;//測試view,無意義Button btn02 =null;//測試view,表示新增的對象finalintKEY = 1;/** SparseArray指的是稀疏數(shù)組(Sparse

* array),所謂稀疏數(shù)組就是數(shù)組中大部分的內容值都未被使用(或都為零),在數(shù)組中僅有少部分的空間使用

* 。因此造成內存空間的浪費,為了節(jié)省內存空間,并且不影響數(shù)組中原有的內容值,我們可以采用一種壓縮的方式來表示稀疏數(shù)組的內容。*/SparseArray array =newSparseArray();/*增加數(shù)據(jù)*///public void put(int key, E value) {}array.put(KEY, btn);//public void append(int key, E value){}array.append(KEY, btn);/*修改數(shù)據(jù)*///在put數(shù)據(jù)之前,會先查找要put的數(shù)據(jù)是否已經(jīng)存在,如果存在就是修改,不存在就添加。//public void put(int key, E value)array.put(KEY, btn);//public void setValueAt(int index, E value)array.setValueAt(KEY, btn02);/*查找數(shù)據(jù)*///public E get(int key)array.get(KEY);//public E get(int key, E valueIfKeyNotFound)//其中get(int key)也只是調用了 get(int key,E valueIfKeyNotFound),最后一個從傳參的變量名就能看出,傳入的是找不到的時候返回的值.get(int key)當找不到的時候,默認返回null。array.get(KEY, btn);//如果這個key找不到value,那么就返回第二個參數(shù)。和default value一樣//查看第幾個位置的鍵://public int keyAt(int index)array.keyAt(1);//如果找不到就返回-1//查看第幾個位置的值://public E valueAt(int index)array.valueAt(1);//查看值所在位置,沒有的話返回-1://public int indexOfValue(E value)array.indexOfValue(btn);

SparseBooleanArray d;

}

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容