一、Map借口继承树
Map与Collection并列存在。用于保存具有映射关系的数据:Key-Value
Map 中的key 和 value 都可以是任何引用类型的数据
Map 中的 key 用Set来存放,不允许重复,即同一个 Map 对象所对应的类,须重写hashCode()和equals()方法。
常用String类作为Map的“键”。
key 和value 之间存在单向一对一关系,即通过指定的 key 总能找到唯一的、确定的 value。
Map存储结构图
横向看的话:每一个行键值对都是一个Entry。
纵向看的话:左边是一个集合键,不可重复,使用Set来存放的。右边是值,是用Collection来存的,可重复的。
二、Map的常用实现类HashMap及主要方法的使用
Map常用的方法:
Object put(Object key,Object value):向Map中添加一个元素 。map可以添加键为null,值为null。
Object remove(Object key):按照指定的key删除此key-value
void putAll(Map t)
void clear():清空 Object。
get(Object key):获取指定key的value值。若无此key,则返回null。
boolean containsKey(Object key)
boolean containsValue(Object value)
int size():返回集合的长度 boolean。
isEmpty()
boolean equals(Object obj)
HashMap:
1.key是用Set来存放的,不可重复。value是用Collection来存放的,可重复。
一个key-value对,是一个Entry。所有的Entry是用Set存放的,也是不可重复的。
2.向HashMap中添加元素时,会调用key所在类的equals()方法,判断两个key是否相同。若相同 则只能添加进后添加的那个元素。
三、以HashMap为例谈Map的遍历
如何遍历Map:有三种方法 .
1、Set keySet():遍历所有的键
2、Collection values() :遍历所有的值 Set
3、entrySet():遍历键值对
hashMap可以存放null键,null值。
// 1.遍历key集
@Test
public void testKey(){
Map<String, Object> map = new HashMap<String, Object>();
map.put("AA", 123);
map.put("BB", 567);
map.put("CC", 890);
map.put(null, null);
Set<String> s = map.keySet();
for (String s1 : s) {
System.out.println(s1);
}
}
结果:
// 2.遍历value集
正确的方法:使用迭代器Iterator实现集合的遍历
@Test
public void testValues(){
Map<String, Object> map = new HashMap<String, Object>();
map.put("AA", 123);
map.put("BB", 567);
map.put("CC", 890);
map.put(null, null);
Collection<Object> col = map.values();
//正确的方法:使用迭代器Iterator实现集合的遍历
Iterator<Object> it = col.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
结果:
// 3.如何遍历key-value对
// 方式一:通过键,获取值
Set set3 = map.keySet();
for(Object obj:set3){
System.out.println(obj+"====>"+map.get(obj));
}
/*
AA====>123
BB====>567
CC====>890
*/
// 方式二:通过entrySet()方法,用 Set<Map.Entry<K,V>>对象接收
@Test
public void testEntrySet(){
Map<String, Object> map = new HashMap<String, Object>();
map.put("AA", 123);
map.put("BB", 567);
map.put("CC", 890);
map.put(null, null);
Set<Map.Entry<String, Object>> s = map.entrySet(); //遍历键值对
for (Map.Entry<String, Object> o : s) {
System.out.println(o.getKey()+"==>"+o.getValue());
}
}
结果: