日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

用SparseArray代替HashMap

發布時間:2025/4/16 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用SparseArray代替HashMap 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

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

?

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

?

一、和Hashmap的對比

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

替換原則:

1>

如果用到了: HashMap<Integer, E> hashMap = new HashMap<Integer, E>();

可以替換為:SparseArray<E> sparseArray = new SparseArray<E>();

2>

如果用到了:HashMap<Integer, Boolean> hashMap = new HashMap<Integer, Boolean>

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

3>

如果用到了:HashMap<Integer, Integer> hashMap = new HashMap<Integer, Integer>

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


二、用法

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

Button btn = null; // 測試view,無意義Button btn02 = null; // 測試view,表示新增的對象final int KEY = 1;/** SparseArray指的是稀疏數組(Sparse* array),所謂稀疏數組就是數組中大部分的內容值都未被使用(或都為零),在數組中僅有少部分的空間使用* 。因此造成內存空間的浪費,為了節省內存空間,并且不影響數組中原有的內容值,我們可以采用一種壓縮的方式來表示稀疏數組的內容。*/SparseArray<View> array = new SparseArray<View>();

?

2.1?增加數據

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

?

2.2 修改數據

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

?

2.3 查找數據

     /* 查找數據 *///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,那么就返回第二個參數。和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);

?

三、測試代碼

package com.kale.pictest;import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.util.SparseArray; import android.util.SparseBooleanArray; import android.view.View; import android.widget.Button;/*** @author:* @description :* @web : http://stormzhang.com/android/2013/08/01/android-use-sparsearray-for-performance-optimization/* @date :2015年1月19日*/ public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);Log.d("TAG", "Max memory is " + maxMemory + "KB");Button btn = null; // 測試view,無意義Button btn02 = null; // 測試view,表示新增的對象final int KEY = 1;/** SparseArray指的是稀疏數組(Sparse* array),所謂稀疏數組就是數組中大部分的內容值都未被使用(或都為零),在數組中僅有少部分的空間使用* 。因此造成內存空間的浪費,為了節省內存空間,并且不影響數組中原有的內容值,我們可以采用一種壓縮的方式來表示稀疏數組的內容。*/SparseArray<View> array = new SparseArray<View>();/* 增加數據 *///public void put(int key, E value) {} array.put(KEY, btn);//public void append(int key, E value){} array.append(KEY, btn);/* 修改數據 *///在put數據之前,會先查找要put的數據是否已經存在,如果存在就是修改,不存在就添加。//public void put(int key, E value) array.put(KEY, btn);//public void setValueAt(int index, E value) array.setValueAt(KEY, btn02);/* 查找數據 *///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,那么就返回第二個參數。和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;} }

?

總結

以上是生活随笔為你收集整理的用SparseArray代替HashMap的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。