日韩性视频-久久久蜜桃-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的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 中文字幕一区二区三区精品 | 午夜影院0606 | 亚洲区在线播放 | 韩国激情呻吟揉捏胸视频 | 男男黄网站 | 狠狠插狠狠操 | 好男人在线视频 | 久久久午夜电影 | 大屁股白浆一区二区 | 青青草久久爱 | 特黄三级又爽又粗又大 | wwww日本60| 中文字幕人妻一区二区三区在线视频 | 一区二区三区高清 | 中文字幕最新 | 国产精品视频一区二区三区, | 在线a免费| 99精品人妻少妇一区二区 | 老妇高潮潮喷到猛进猛出 | 成人国产 | 精品亚洲精品 | 亚洲乱码视频在线观看 | 欧美精品一二区 | 视色网 | 亚洲少妇一区 | 在线视频激情小说 | 亚洲av无码潮喷在线观看 | 亚洲国产黄色 | 日本不卡视频一区 | 超碰在线9 | 中文字幕人妻精品一区 | 国产毛片一区二区 | 天天爽天天射 | 精品人妻一区二区三区免费看 | 美女激情av | 国产一区二区色 | 久久人人草 | 在线观看污污网站 | 国产精品伊人 | 最新在线视频 | 激情黄色av | 亚洲av人人澡人人爽人人夜夜 | 成人在线免费看片 | 伊人影院中文字幕 | 精品无码人妻一区二区免费蜜桃 | 乱lun合集小可的奶水 | 女性生殖扒开酷刑vk | 精品动漫一区二区三区的观看方式 | 国产av一区二区三区 | 欧美成人手机在线视频 | 久久精品电影网 | 98色 | 国产wwwwww | 超碰超在线 | 成人久久精品人妻一区二区三区 | 日本三级一区二区 | 日韩专区第一页 | 国产欧美又粗又猛又爽 | 秋霞影院午夜老牛影院 | 狠狠操天天操 | 日本xxx在线播放 | 欧美激情视频网址 | 女上男下动态图 | www.超碰97.com| 五月婷婷婷婷 | 欧美在线一区二区 | 成年女人免费视频 | 夜夜草av| 制服丝袜一区二区三区 | 天堂福利视频 | 日本xxxxwwwww| 色汉综合| 夜夜天天 | 精品一区日韩 | 麻豆成人免费 | 国产精品国产三级国产Av车上的 | a一级视频| 777精品伊人久久久久大香线蕉 | 国产91精品一区二区绿帽 | 天堂av中文在线观看 | 午夜精品成人毛片非洲 | 91久久国产综合久久 | www.日韩在线观看 | 在线观看视频福利 | 亚洲a v网站 | 日韩av不卡在线 | 成人午夜网站 | 中文乱码人妻一区二区三区视频 | 久久精品在线播放 | 国产女人高潮毛片 | av资源新版在线天堂 | 国产伦精品一区二区三区四区视频 | 欧美久久久久久 | 熟女熟妇伦久久影院毛片一区二区 | 欧美亚洲在线 | 欧美在线观看一区 | 超污视频软件 | 日批的视频 | 国产一级视频在线 |