我们为什么需要Map?
在现实世界里,数据信息经常是成对出现的,比如一部手机与它的拥有者,就是一种成对的数据存储关系。
编程语言,也往往会趋向于贴合现实,其中Map就是用来存储“键(key)-值(value) 对”,这样一种成对关系的数据的。
Map类中存储的“键值对”通过键来标识,所以“键对象”不能重复。
其实某种意义上,数组的下标,就是一种“键”,但数组的“键”只能数int类型。在Map中,键(key)与值(value)都可以是任何类型,包括你自己定义的类型,但不能是基础数据类型,得是其《包装类》。
Map接口的实现类有HashMap、TreeMap、HashTable、LinkedHashMap等。
常用方法
Map接口中的所有抽象方法如下:
比较常用的方法和说明如下:
序号 | 标题 |
---|---|
V put(K key, V value); | 存放键值对 |
V get(Object key); | 通过“键”取得“值” |
V remove(Object key); | 移除指定“键”的键值对 |
boolean containsKey(Object key); | 判断Map是否包含对应“键”的键值对 |
boolean containsValue(Object value); | 判断Map是否包含对应“值”的键值对 |
void clear(); | 清空Map中所有键值对 |
boolean isEmpty(); | 判断Map是否为空 |
void putAll(Map<? extends K, ? extends V> m); | 将传入的Map加入本Map中 |
Map是接口,不能实例化,来个使用HashMap的实例合集:
public class Test {
public static void main(String args[]) {
Map<Integer,String> map1 = new HashMap<>(); //注意,得使用包装类
map1.put(0, "a");
map1.put(1, "b");
map1.put(2, "c");
System.out.println(map1);
map1.put(3, "b"); //map特性:值(value)可以重复
map1.put(0, "b"); // 键(key)不可以重复,会被覆盖
System.out.println(map1);
System.out.println("get()方法:"+map1.get(2));
map1.remove(3);
System.out.println("remove()方法:"+map1);
System.out.println("containsKey()方法:"+map1.containsKey(1));
System.out.println("containsValue()方法:"+map1.containsValue("a"));
Map<Integer,String> map2 = new HashMap<>(); //注意,得使用包装类
map2.put(0, "a");
map2.put(3, "d");
System.out.println("map1:"+map1); //先输出一下,便于观察
System.out.println("map2:"+map2);
map1.putAll(map2); // key相同的覆盖,不同的新增
System.out.println("putAll()方法:"+map1);
map2.clear(); // 晴空map2
System.out.println("isEmpty()方法:"+map2.isEmpty());
}
}
-----------------------------------------------------------------
输出结果为:
{0=a, 1=b, 2=c}
{0=b, 1=b, 2=c, 3=b}
get()方法:c
remove()方法:{0=b, 1=b, 2=c}
containsKey()方法:true
containsValue()方法:false
map1:{0=b, 1=b, 2=c}
map2:{0=a, 3=d}
putAll()方法:{0=a, 1=b, 2=c, 3=d}
isEmpty()方法:true