Map
2018-04-09 本文已影响19人
SingleDiego
Map
是键值对的集合。Map
中的每个元素是一个键值对,即一个 键(key)和它对应的对象 值(value)。对于 Map
容器,我们可以通过键来找到对应的对象。
哈希表是 Map
常见的一种实施方式。
我们需要声明 Map
的键和值的类型。我们下面实施一个 HashMap
:
import java.util.*;
public class Test
{
public static void main(String[] args)
{
Map<String, Integer> m1 = new HashMap<String, Integer>();
m1.put("jimmy", 12); // 添加元素
m1.put("Jerry", 5);
m1.put("Tom", 18);
System.out.println(m1.get("jimmy")); // 获取元素
}
}
输出:
12
Map
的官方文档:https://docs.oracle.com/javase/6/docs/api/java/util/Map.html
size()
size()
方法返回 Map
的长度。
clear()
clear()
方法清空一个 Map
。
isEmpty()
判断一个 Map
是否为空。
Map<String, Integer> m1 = new HashMap<String, Integer>();
m1.put("jimmy", 12);
m1.put("Jerry", 5);
m1.put("Tom", 18);
m1.clear(); // 清空 m1
System.out.println(m1.isEmpty()); // 是否为空
System.out.println(m1.size()); // 返回长度
输出:
true
0
containsKey()
containsKey()
方法判断 Map
中是否包含有指定的键 key
。
containsValue()
containsValue()
方法判断 Map
中是否包含有指定的值 value
。
Map<String, Integer> m1 = new HashMap<String, Integer>();
m1.put("jimmy", 12);
m1.put("Jerry", 5);
m1.put("Tom", 18);
System.out.println(m1.containsKey("jimmy"));
System.out.println(m1.containsKey("tommy"));
System.out.println(m1.containsValue(12));
System.out.println(m1.containsValue(4));
输出:
true
false
true
false
equals()
判断两个 Map
是否相等。
Map<String, Integer> m1 = new HashMap<String, Integer>();
m1.put("jimmy", 12);
m1.put("Jerry", 5);
m1.put("Tom", 18);
Map<String, Integer> m2 = new HashMap<String, Integer>();
m2.put("Jerry", 5);
m2.put("Tom", 18);
m2.put("jimmy", 12);
System.out.println(m1.equals(m2)); // 判断 m1 和 m2 是否等价
输出:
true
get()
通过键获取值,如果键不存在返回 null
。
Map<String, Integer> m1 = new HashMap<String, Integer>();
m1.put("jimmy", 12);
m1.put("Jerry", 5);
m1.put("Tom", 18);
System.out.println(m1.get("Jerry"));
System.out.println(m1.get("tonny"));
输出:
5
null
Map 的遍历
entrySet()
entrySet()
方法可以把 Map
中的集合中的映射关系取出放到一个 Set
中,该 Set
中的元素通过 getKey()
和 getValue()
方法获取键和值。
Map<String, Integer> m1 = new HashMap<String, Integer>();
m1.put("jimmy", 12); // 添加元素
m1.put("Jerry", 5);
m1.put("Tom", 18);
// 通过 entrySet() 方法将 Map 集合中的映射关系取出
Set<Map.Entry<String, Integer>> e1 = m1.entrySet();
// 将关系集合 entrySet 进行迭代,存放到迭代器中
Iterator<Map.Entry<String, Integer>> it = e1.iterator();
while (it.hasNext()) {
// 获取 Map.Entry 关系对象 me
Map.Entry<String, Integer> me = it.next();
// 通过关系对象获取 key
String key = me.getKey();
// 通过关系对象获取 value
Integer value = me.getValue();
System.out.println("key: " + key + " --> value: " + value);
}
输出:
key: Tom --> value: 18
key: Jerry --> value: 5
key: jimmy --> value: 12
keySet()
keySet()
方法可以把 Map
中的键取出,放到一个 Set
中。
Map<String, Integer> m1 = new HashMap<String, Integer>();
m1.put("jimmy", 12); // 添加元素
m1.put("Jerry", 5);
m1.put("Tom", 18);
//先获取map集合的所有键的Set集合
Set<String> ks = m1.keySet();
//有了Set集合,就可以获取其迭代器。
Iterator<String> it = ks.iterator();
while (it.hasNext()) {
String key = it.next();
//有了键可以通过map集合的get方法获取其对应的值。
Integer value = m1.get(key);
System.out.println("key: " + key + " --> value: " + value);
}
输出:
key: Tom --> value: 18
key: Jerry --> value: 5
key: jimmy --> value: 12