1、Map是一个interface,其有很多实现类,主要有HashMap
2、Map存放的是键值对:Map<K,V>。一个map不能包含重复的keys,每个key可以映射到多个value上。
3、put方法:map.put(key, value)
HashMap map = new HashMap();
map.put("a", "zhangsan");
map.put("b", "lisi");
map.put("c", "wangwu");
System.out.println(map.toString());
输出结果:{b=lisi, c=wangwu, a=zhangsan}
从结果可以看出,map在输出时是按照键值对的形式输出的,输出的顺序与存入的顺序无关。
如果在添加一条:map.put("a", "zhang");输出结果会是怎么样呢?能添加成功吗?
经过编译运行,得到的结果是{b=lisi, c=wangwu, a=zhang} 我们发现键值为“a“的value值由“zhangsan"--->"zhang".Map添加元素的机制和Set的添加机制是不一样的。如果我们向map中添加元素时,有两个元素的key是一样的,那么后添加的value值会把该key已存在的value值覆盖掉。
4、get方法:get(key):如果key存在,就返回key的value值;如果key不存在,则返回null
(1)存在String value = (String) map.get("b"); 输出:lisi
(2)不存在String value = (String) map.get("d"); 输出:null
5、如果我们不知道map中的键是什么类型的,想要获取其值?
Map本身给我们提供了两种方式:
(1)keySet:返回key的集合,因为Map的键key是不能重复的,所以返回值的类型是Set类型的
Set set = map.keySet();
for (Iterator iter = set.iterator(); iter.hasNext();) {
String key = (String) iter.next();
String value = (String) map.get(key);
System.out.println(key + "=" + value);
}
输出结果:
b=lisi
c=wangwu
a=zhangsan
(2)values:返回值是Collection类型,值可以重复,Collection允许放重复的元素
Collection collection = map.values();
6、Map.Entry类:Map取数据的第二种方式,效率较高,必会
Set set = map.entrySet();
//entry中封装了key和value
for (Iterator iter = set.iterator(); iter.hasNext();) {
Map.Entry entry = (Map.Entry) iter.next();
String key = (String) entry.getKey();
String value = (String) entry.getValue();
System.out.println(key + ":" + value);
}//一定要会
与keySet实际实现是一样的,二者使用的选择据个人而定