一、java.util.Map
Map在java中是一种非常常用的数据结构。它体现的结构是一个多行两列的表格,其中左侧的称为key,右侧的称为value。
Map总是成对保存数据,并且总是根据key获得对应的value。因此我们可以将查询的条件作为key,查询对应的结果作为value保存到Map中。
Map有一个要求:key不允许重复(根据key自身的equals方法比较判定)
java.util.Map是所有Map的顶级接口,规定了Map的相关功能。
1、常用实现类及区别:
java.util.HashMap:称为散列表,是使用散列算法实现的Map,是当今查询速度最快的数据结构,允许使用null(key和value都可以为null)。
java.util.TreeMap:使用红黑树实现的Map,不允许使用null(key和value均不能为null)
java.util.HashTable:与HashMap大致相同,但是线程安全,不允许使用null。
2、常用方法:
1、[V] put(K k,V v):
将给定的键值对存入Map,由于Map要求key不允许重复,若使用已有的key存入value
时则为替换操作,返回值为旧value,否则返回值为null。
2、[int] size():
获取Map的元素个数,每组键值对算一组元素。
3、[V] get(Object k):
根据给定的key值获取对应的value。如果给定的key不存在,则返回值为null。
4、[V] remove(Object k):
删除当前Map中给定的key所对应的键值,返回值为这个key对应的value
5、[boolean] containsKey(Object k):
判断当前的map是否包含给定的key值
6、[boolean] containsValue(Object v):
判断当前的map是否包含给定的value值。
如果Map的value是包装类类型时,在接收value值的时候一定要用包装类类型的变量接收,
不要使用对应的基本类型变量接收。避免因为自动拆装箱出现空指针异常。
3、Map的遍历
以下列代码为例:
Map<String,Integer> map = new HashMap<>();
map.put("语文",97);
map.put("数学",98);
map.put("英语",99);
map.put("体育",60);
System.out.println(map);
1、遍历所有的key:[Set<K>集合] keySet()
将当前Map中所有的key以一个Set集合的形式返回。遍历该集合等同于遍历Map中所有的key
Set<String> keySet = map.keySet();
System.out.println(keySet);//[体育, 数学, 语文, 英语]
for (String key: keySet) {
System.out.println("key="+key);
}
keySet.forEach(k -> System.out.println(k));
2、遍历所有的键值对:[Set<Entry>] entrySet()
将当前Map中的每一组键值对以若干个Entry实例保存,并且存入一个Set集合后返回。
java.util.Map.Entry该接口的每一个实例用于表示Map中的一组键值对,该类提供了两个常用方法:[K] getKey() 、[V] getValue()
Set<Map.Entry<String, Integer>> me = map.entrySet();
System.out.println(me);//[体育=60, 数学=98, 语文=97, 英语=99]
for (Map.Entry<String,Integer> mey: me) {
System.out.println(mey);
System.out.println("key:"+mey.getKey()+"|value:"+mey.getValue());
}
//JDK8之后,Map也提供了forEach()方法,用lambda表达式遍历
map.forEach((k,v)-> System.out.println(k+":"+v));
3、遍历所有的value:[Collection<V>] values():
将当前的Map中的所有value以一个集合形式返回
Collection<Integer> values = map.values();
System.out.println(values);//[60, 98, 97, 99]
for (Integer score: values) {
System.out.println(score);
}
values.forEach(score -> System.out.println("分数为:"+score));