现实生活中,我们经常需要成对存储某些信息。比如,我们使用的微信,一个手机号只能对应一个微信账户。这就是一种成对存储的关系。

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());
}