1.什么是Map
Map是Java集合中的三大接口之一,其存储形式为键(Key)值(Value)对,是程序开发中大部分数据存储时所采用的存储形式。如:MySQL、JSON、XML。
Map形式称为双边队列,即Key与Value互相对应。但需要注意:Key是唯一的,不可能有多个重复的Key。而Value是可重复的。
具体形式如表格:
Key | Value |
---|---|
姓名 | 燕双鹰 |
年龄 | 30 |
性别 | 男 |
2.Map接口的实现类
interface Map<K, V>
--| class HashMap<K, V> 哈希表
--| class TreeMap<K, V> 底层是树形结构,存储要求K有对应的排序方式
3.方法
3.1 增:
put(K k, V v);
存入一个键值对类型,K和V都要符合泛型约束
putAll(Map < ? extends K, ? extends V > map);
存入另一个Map双边队列,并且要求添加的Map双边队列中的K和V都要和当前Map中存储的K和V一致。
3.2 删:
remove(Object k);
删除对应K的键(Key)值(Value)对
3.3 改:
put(K k, V v);
对应当前K存在,修改对应内容
3.4 查:
int size();
当前Map双边队列中,有效键值对个数
boolean isEmpty();
是否为空
boolean containsKey(Object key);
判断指定的Key是否存在
boolean containsValue(Object value);
判断指定的Value是否存在
Set<K> keySet();
返回整个Map双边队列中所有Key对应的Set集合
【注意:】
一个方法使用set结尾,表示该方法返回值是一个集合类型,大多数情况下都是Set类型
Collection<V> values();
返回整个Map双边队列中所有Value对应的Collection集合
【注意】
方法名如果是一个复数,返回值类型集合或者数组情况居多
4.EntrySet
Entry可以认为是键值对对象。
定义在Map类内
class Entry<K,V> {
K k;
V v;
}
K, V 是完全依赖于Map约束的,这里可以认为Entry里保存的是每一个键值对类对象。
Map中提供了一个方法
Set<Entry<K, V>> entrySet
返回值是键值对类对象Set集合
Set集合中存储的是Entry类型
Entry类型是带有泛型的
代码:
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class Demo1 {
public static void main(String[] args) {
HashMap<String, String> map = new HashMap<String, String>();
map.put("吴京", "谢楠");
map.put("邓超", "娘娘");
map.put("黄磊", "孙莉");
map.put("王宝强", "XX");
Set<Map.Entry<String, String>> entrySet = map.entrySet();
System.out.println(entrySet);
}
}
运行结果:
[邓超=娘娘, 吴京=谢楠, 黄磊=孙莉, 王宝强=XX]
5.TreeMap
K是需要有对应的比较方式,如果没有比较方式,则无法存入
推荐使用Comparator接口。