在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集合添加和删除键值对的方法
方法 |
描述 |
clear() |
删除该Map集合中的全部元素 |
remove(Objectkey) |
删除键名为key所对应的键值对 |
put(Objectkey,Objectvalue) |
添加一个新的键值对 |
putAll(Mapmap) |
将该Map集合的元素全部复制到新的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类型。