在Android系統中,有着多種存儲數據的方式,例如,文件、數據庫及程序內參數式存儲、網絡存儲等。對於參數式存儲時,使用的就是Map類。Map本身是Interface,Java基於該接口實現三個具體的Map類,分別是HashMap、TreeMap,以及EnumMap,常用的為HashMap,本文也主要介紹HashMap。
Map定義了訪問特定集合的標准方法,這種集合用來存儲key-value類型的鍵值對,比如,對於name:Haiii和 age:22這兩組數據來講,其中name、age稱為鍵(key),與此對應的是鍵值(value)。在一個Map集合類中,每對鍵或值其類型都可以是 任意的,比如int、String等都是可以的。
Map類又是一個類模板,一個Map類對象在初始化時必須指定鍵的類型,可以是任何Object類,比如,Map<String,Object> mMap= new HashMap<String,Object>()。
<>里面的數據類型用於指定Map集合中“鍵值對”的類型。
給Map集合添加和刪除鍵值對的方法如表1-1所示。
表1-1 Map集合添加和刪除鍵值對的方法
Map類沒有提供直接遍歷鍵值對的方法,要遍歷所有鍵值對需要一個中間過程。Map提供了3個方法用於間接遍歷鍵值對,如下:
·entrySet() 返回所有鍵值對類型為Set對象。
·keySet() 返回所有鍵值對類型為Set對象。
·valueSet() 返回所有鍵值對類型為Collection對象。
要得到具體的鍵值對,需要再解析Set和Collection對象,但僅有這兩個對象還不能獲得鍵值對,還需要借助於Iterator類。到這里,可能覺得有些復雜,別着急,結果馬上就要出來了。
Set、Collection、Iterator實際上是Map內部進行操作的3個輔助類,要得到具體Map鍵值對,如代碼清單1-1所示。
代碼清單1-1 得到具體的Map鍵值對
Map<String,Object> mMap = new HashMap<String,Object>();
Iterator kv = mMap.entrySet().iterator();
Iterator k = mMap.keySet().iterator();
Iterator v = mMap.values().iterator();
Int size = mMap.size();
for(int i = 0;i<size;i++)
{
Map.Entryentry = (Map.Entry)kv.next();
Object key = entry.getKey();
Object value = entry.getValue();
}
用以上代碼讀取鍵值對時,Object可以強制轉換為int類型。