在Android系統(tǒng)中,有著多種存儲數(shù)據(jù)的方式,例如,文件、數(shù)據(jù)庫及程序內(nèi)參數(shù)式存儲、網(wǎng)絡(luò)存儲等。對于參數(shù)式存儲時,使用的就是Map類。Map本身是Interface,Java基于該接口實(shí)現(xiàn)三個具體的Map類,分別是HashMap、TreeMap,以及EnumMap,常用的為HashMap,本文也主要介紹HashMap。
Map定義了訪問特定集合的標(biāo)準(zhǔn)方法,這種集合用來存儲key-value類型的鍵值對,比如,對于name:Haiii和age:22這兩組數(shù)據(jù)來講,其中name、age稱為鍵(key),與此對應(yīng)的是鍵值(value)。在一個Map集合類中,每對鍵或值其類型都可以是任意的,比如int、String等都是可以的。
Map類又是一個類模板,一個Map類對象在初始化時必須指定鍵的類型,可以是任何Object類,比如,Map<String,Object> mMap= new HashMap<String,Object>()。
<>里面的數(shù)據(jù)類型用于指定Map集合中“鍵值對”的類型。
給Map集合添加和刪除鍵值對的方法如表1-1所示。
表1-1 Map集合添加和刪除鍵值對的方法
方法 |
描述 |
clear() |
刪除該Map集合中的全部元素 |
remove(Objectkey) |
刪除鍵名為key所對應(yīng)的鍵值對 |
put(Objectkey,Objectvalue) |
添加一個新的鍵值對 |
putAll(Mapmap) |
將該Map集合的元素全部復(fù)制到新的Map中 |
Map類沒有提供直接遍歷鍵值對的方法,要遍歷所有鍵值對需要一個中間過程。Map提供了3個方法用于間接遍歷鍵值對,如下:
·entrySet() 返回所有鍵值對類型為Set對象。
·keySet() 返回所有鍵值對類型為Set對象。
·valueSet() 返回所有鍵值對類型為Collection對象。
要得到具體的鍵值對,需要再解析Set和Collection對象,但僅有這兩個對象還不能獲得鍵值對,還需要借助于Iterator類。到這里,可能覺得有些復(fù)雜,別著急,結(jié)果馬上就要出來了。
Set、Collection、Iterator實(shí)際上是Map內(nèi)部進(jìn)行操作的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可以強(qiáng)制轉(zhuǎn)換為int類型。