Map接口
现实生活中,我们经常需要成对存储某些信息。比如,我们使用的微信,一个手机号只能对应一个微信账户。这就是一种成对存储的关系。
Map集合用于存储“键值对”,键指的就是“key”,值指的就是“value”。Map集合中“key”必须唯一,但是“value”可以重复。
例如:生活中,每个人都有“身份证号”,此处的“身份证号”指的就是“key”,每个“身份证号”对应着一个“姓名”,此处的“姓名”值的就是“value”。
注意:生活中,身份证号肯定是唯一的,也就意味着Map集合中的“key”为唯一的,但是“姓名”不是唯一的,也就意味着Map集合中的“value”可以重复。
Map接口位于java.util包中,开发中Map接口最常用的实现类有HashMap、LinkedHashMap、TreeMap、HashTable、Properties等等。
Map接口中定义的方法 | |
Object put(Object key, Object value); | 存放键值对。 |
Object get(Object key); | 通过键对象查找得到值对象。 |
Object remove(Object key); | 删除键对象对应的键值对。 |
boolean containsKey(Object key); | Map容器中是否包含键对象对应的键值对。 |
boolean containsValue(Object value); | Map容器中是否包含值对象对应的键值对。 |
Collection values(); | 获取集合中所有的值 |
int size(); | 获取包含键值对的数量。 |
boolean isEmpty(); | 判断Map是否为空。 |
void clear(); | 清空本map对象所有键值对。 |
【示例】Map接口方法使用
// 创建一个map容器
Map<Integer, String> map = new HashMap<Integer, String>();
// 添加键值对
map.put(11, "zhansan");
map.put(4, "lisi");
map.put(6, "wangmazi");
map.put(6, "xiaowang");
// 获取键值对个数
System.out.println(map.size());
// 判断Map是否为空
System.out.println(map.isEmpty());
// 根据键获取值
System.out.println(map.get(11));
System.out.println(map.get(12));
// Map容器中是否包含键对象对应的键值对
System.out.println(map.containsKey(111));
// Map容器中是否包含值对象对应的键值对
System.out.println(map.containsValue("lisi"));
// 获取集合中所有的值
Collection<String> values = map.values();
// 删除键对象对应的键值对
map.remove(11);
// 清空本map对象所有键值对
map.clear();
注意:Map集合不能直接使用Iterator迭代器,因为迭代器只能在List接口和Set接口中使用。
1.遍历Map集合的方式
方式一:使用keySet()方法
作用:能够获得Map集合中的所有key值,然后把所有的key值封装成Set集合返回。
方式二:使用entrySet()方法
作用:能够获得Map集合中的键值对,该键值对封装在“Map.Entry”对象中,然后把所有的Entry对象封装成Set集合返回。
2.Map集合key的唯一性
添加键值对的时候,如果Map集合中已经存在某一个key,那么会执行覆盖操作,最终保持了key的唯一性。
【示例】keySet() 方法使用
// 创建一个map容器
Map<Integer, String> map = new HashMap<Integer, String>();
// 添加键值对
map.put(11, "zhansan");
map.put(4, "lisi");
map.put(6, "wangmazi");
map.put(7, "xiaowang");
// 获取键(key)的set集合
Set<Integer> set = map.keySet();
// 迭代器
Iterator<Integer> iterator = set.iterator();
while(iterator.hasNext()) {
// 获取到键key
Integer key = iterator.next();
// 输出map的key和value
System.out.println("key: " + key + " value: " + map.get(key));
}
【示例】entrySet () 方法使用
// 创建一个map容器
Map<Integer, String> map = new HashMap<Integer, String>();
// 添加键值对
map.put(11, "zhansan");
map.put(4, "lisi");
map.put(6, "wangmazi");
map.put(7, "xiaowang");
// entrySet方法
Set<Entry<Integer, String>> entrySet = map.entrySet();
// 获取迭代器
Iterator<Entry<Integer, String>> iterator = entrySet.iterator();
while(iterator.hasNext()) {
// 获取Entry对象
Entry<Integer, String> next = iterator.next();
// 输出map的key和value
System.out.println("key: " + next.getKey() + " value: " + next.getValue());
}