SparseArray ArrayMap HashMap 區別
一直以來,在專案中需要使用到這類的資料結構式,都習慣性的想到HashMap,也沒有關心過
其他的問題。
SparseArray
最近偶然看到SparseArray這種資料結構,才發現原來android內部是推薦使用這種資料結構的,由於Android對應的裝置記憶體相對來說比較小,因而記憶體是比較稀罕的東西,而SparseArray
恰好是儲存的記憶體相對來說比較小。在某些條件下效能更好,主要是由於它避免了對key的自己主動裝箱(int轉為Integer型別),它內部則是通過兩個陣列來進行資料儲存的。一個儲存key,另外一個儲存value,為了優化效能,它內部對資料還採取了壓縮的方式來表示稀疏陣列的資料,從而節約記憶體空間。
private int[] mKeys;
private Object[] mValues;這是SparseArray原始碼中定義的兩個陣列物件,很容易就可以知道mKey是儲存key值得陣列,而mValues就是儲存value值得資料物件。
這是原始碼中取得value值的程式碼片段,可以看出是通過二分法來獲取value值的,同樣put也是這樣去插入值得.
所以在獲取資料的時候,比hashMap去遍歷查詢要快的多。當然在key值上面只能使用int型別可能是這個資料結構的不足之處吧。
相關推薦
SparseArray ArrayMap HashMap 區別
一直以來,在專案中需要使用到這類的資料結構式,都習慣性的想到HashMap,也沒有關心過 其他的問題。 SparseArray 最近偶然看到SparseArray這種資料結構,才發現原來android內部是推薦使用這種資料結構的,由於Android對應的裝置記憶體相對來說比較小,因
ArrayMap和HashMap區別
如果 一定的 技術分享 pub ray aci 知識 處理 arraymap 什麽是Map? Map的三個特點 1.包含鍵值對 2.鍵唯一 3.鍵對應的值唯一 一: 什麽是Hash Hash,也可以稱為“散列”,就是把任意長度的輸入,通過散列算法,變換成固定長度的輸出,該輸
HashTable和HashMap區別
shc 使用 num 應該 extend 是否 bstr shm nbsp ①繼承不同。 public class Hashtable extends Dictionary implements Map public class HashMap extends Abs
Java之JSONObject存取值以及和HashMap區別, optString()和getString()區別和他的遍歷方式
結論: 1.JSONObject和HashMap用法上是一樣的,用put()方法存對於的Key-values鍵值對,取可用optString(key)和getString(key),get(key),存入的是什麼型別,取出來的時候就是什麼型別 2**.optString()在沒找到k
Android : SparseArray vs HashMap
SparseArray vs HashMap Main purpose of SparseArray in Android development is to have a memory efficient integer to object mapping. It is not s
【轉載】LinkedHashMap和HashMap區別
HashMap,LinkedHashMap,TreeMap都屬於Map Map 主要用於儲存鍵(key)值(value)對,根據鍵得到值,因此鍵不允許鍵重複,但允許值重複。 HashMap 是一個最常用的Map,它根據鍵的HashCode 值儲存資料,根據鍵可以直接獲取它的值,具有很
Android應用效能優化之使用SparseArray替代HashMap
原文地址:http://liuzhichao.com/p/832.html HashMap是java裡比較常用的一個集合類,我比較習慣用來快取一些處理後的結果。最近在做一個Android專案,在程式碼中定義這樣一個變數,例項化時,Eclipse卻給出了一個 pe
效能優化:使用SparseArray代替HashMap
HashMap是java裡比較常用的一個集合類,我比較習慣用來快取一些處理後的結果。最近在做一個Android專案,在程式碼中定義這樣一個變數,例項化時,Eclipse卻給出了一個 performance 警告。 意思就是說用SparseArray<E>
Java基礎知識總結 (二) Hashtable ConcurrentHashMap TreeMap HashMap 區別
集合類 Key Value Super 說明 Hashtable 不允許為 null 不允許為 null Dictionary 執行緒安全 Co
Java中Hashtable和HashMap區別
第一,繼承和實現不同 public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, java.io.Serializ
【轉】HashMap,ArrayMap,SparseArray源碼分析及性能對比
sea 實現原理 ati 順序 dex lan time 提示 內存占用 HashMap,ArrayMap,SparseArray源碼分析及性能對比 jjlanbupt 關註 2016.06.03 20:19* 字數 2165 閱讀 7967評論 13喜歡 43
ArrayMap和HashMap的記憶體佔用的區別
HashMap 原理: HashMap 是基於雜湊表的 Map 介面實現的,內部儲存的結構是使用雜湊表的拉鍊結構(陣列+連結串列)的方式,如下圖所示 HashMap中預設的儲存大小就是一個容量為16的陣列,所
Android記憶體優化--使用SparseArray和ArrayMap代替HashMap
前言 在Android開發時,我們使用的大部分都是Java的api,比如HashMap這個api,使用率非常高,但是對於Android這種對記憶體非常敏感的移動平臺,很多時候使用一些java的api並不能達到更好的效能,相反反而更消耗記憶體,所以針對Andro
HashMap和Hashtable的區別
性能 刪除 影響 之間 fail 創建 允許 hashmap 以及 HashMap和Hashtable都實現了Map接口,但決定用哪一個之前先要弄清楚它們之間的分別。主要的區別有:線程安全性,同步(synchronization),以及速度。 HashMap幾乎可以等價於
淺析HashMap和Hashtable的區別
兩個 ble dem pub 實現 value key-value span div HashMap和Hashtable兩個類都實現了Map接口,二者保存鍵值對(key-value對); HashMap和HashTable區別 第一,繼承的父類不同。HashMap繼承自A
HashMap,LinkedHashMap,TreeMap的區別(轉)
很快 value 有一個 連接池 構造 數據 com 最好的 三種 Map主要用於存儲健值對,根據鍵得到值,因此不允許鍵重復(重復了覆蓋了),但允許值重復。 HashMap HashMap 是一個最常用的Map,它根據鍵的HashCode 值存儲數
HashMap與HashTable的區別
存在 tle static www. rehash ring fix 進行 容易 HashMap和Hashtable的區別 導讀: 1 HashMap不是線程安全的 HashMap是map接口的子類,是將鍵映射到值的對
java---Hashset與Hashmap的區別
first 一個 有一個 成功 5% syn 映射 我們 equals HashMap和HashSet的區別是Java面試中最常被問到的問題。如果沒有涉及到Collection框架以及多線程的面試,可以說是不完整。而Collection框架的問題不涉及到HashSet和Ha
HashMap、HashTable、LinkedHashMap和TreeMap用法和區別
strong style 取出 能力 順序 ron public ons 保存 Java為數據結構中的映射定義了一個接口java.util.Map,它有四個實現類,分別是HashMap、HashTable、LinkedHashMap和TreeMap。本節實例主要介紹這4中實
HashTable與HashMap的區別,結源碼分析
log code length dex needed 源碼分析 not null 下使用 value 一、HashTable 首先看一下官網的推薦 1 * Java Collections Framework</a>. Unlike the new co