现实生活中,我们经常需要成对存储某些信息。比如,我们使用的微信,一个手机号只能对应一个微信账户。这就是一种成对存储的关系。
Map就是用来存储“键**(key)-**值(value) 对”的。 Map类中存储的“键值对”通过键来标识,所以“键对象”不能重复。
Map接口位于java.util包中,常用的实现类有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集合中提供了get() 获取元素的方法, get()对应一个键取出其对应的值,这种方式比较局限和单一,不能全部取出来。要取出所有的元素(值),则必须要拿到所有的键,然后才能取到所有与其对应的值,针对这种新的需求,Java中提供了相应的解决方案。
Map集合中是没有迭代器的,Map集合取出键值的原理:将Map集合转成Set集合,再通过迭代器取出 。
- keySet() 方法
Set keySet()方法,该返回此映射中包含的键的Set视图将map中所有的键存入到Set集合,因为set具备迭代器,所有迭代方式取出所有的键再根据get()方法,获取每一个键对应的值。
【示例】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()**方法
entrySet()方法,该方法取出的是关系(Set<Map.Entry<K, V>>),关系中包含key和value。其中Map.Entry<K,V>来表示这种数据类型,即将Map集合中的映射关系存入到Set集合中,这个关系的数据类型为Map.Entry接口。
Map.Entry接口在java.util包中,它是Map接口中的一个内部接口,getKey()和getValue()是接口Map.Entry<K,V>中的方法,返回对应的键和对应的值。
【示例】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());
}