Map适用于保存具有映射关系的数据,因此Map集合中保存着两组值,一组值用于保存Map里的key,另外一组值用于保存Map里的value,key和value可以是任何类型的数据,key不允许重复,也就是任何两个key通过equals方法返回的都是false。
key与value之间是单向的一对一关系:通过指定的key,总能找到确定的一个value。
如果从Map键值对中key的角度来看:
Set与Map之间的关系非常密切。虽然Map中存放的是key-value键值对,Set中存放的是无顺序的元素,但如果把Map键值对中的value当作key的附属,那么整个Map集合其实就是一个keyset的Set集合。事实上Map提供了一个Entry内部类来封装key-value键值对,而计算Entry存储时只考虑封装Entry的key,从Java源码来看,Java是先实现了Map,然后通过包装一个所有value都为null的Map就实现了Set集合。
如果从Map键值对中value的角度来看:
把所有的value放在一起,它们又非常像一个List:元素与元素之间可以重复,每个元素可以通过索引来查找,只是Map中的索引不再使用整数值,而是使用key中的对象。因此,Map有时也被称为字典,或者关联数组。
Map的基础用法:
Map map = new HashMap();
map.put("saber","阿尔托莉雅");
map.put("archer","吉尔伽美什");
map.put("lancer","库丘林");
System.out.println(map);
//放入重复的key时,新的value会覆盖原来的value,并返回被覆盖的值
System.out.println(map.put("saber","尼禄"));
System.out.println(map);
//判断是否包含指定key
System.out.println(map.containsKey("saber"));
//判断是否包含指定value
System.out.println(map.containsValue("库丘林"));
//获取Map集合中key的set集合,来遍历Map集合
for (Object key : map.keySet()) {
//get方法获取指定key的value值
System.out.println(key+":"+map.get(key));
}
//根据key来删除value
map.remove("lancer");
System.out.println(map);
一些 Java 8 新增的方法:
package com.woshi;
import java.util.HashMap;
import java.util.Map;
public class MapTest {
public static void main(String[] args) {
Map map = new HashMap();
map.put("saber","阿尔托莉雅");
map.put("archer","吉尔伽美什");
map.put("lancer","库丘林");
//尝试替换key为"rider"的value,由于原Map中没有对应的key
//所以只会返回null,不会添加新的键值对
map.replace("rider", "美杜莎");
System.out.println(map);
//如果获得的value为null,则直接用传入的value覆盖
//如果不为null,则用原有的value和传入的值执行函数,得到新的计算结果,然后去覆盖原有的value
map.merge("saber","潘德拉贡",(oldVal,param)-> (String)oldVal+(String)param);
System.out.println(map);
//当key的value为null,或者key不存在时,使用通过函数得到的新的计算结果作为value,或者创建新的键值对
map.computeIfAbsent("rider", (key) -> "美杜莎");
System.out.println(map);
//当key的value存在且不为null,使用原key和value执行函数得到的新结果覆盖原来的value,如果得到的新结果为null,则删除该键值对
map.computeIfPresent("rider",(key,value)->null);
System.out.println(map);
//遍历map
map.forEach((key,value)-> System.out.println(key+":"+value));
}
}
输出结果:
{lancer=库丘林, saber=阿尔托莉雅, archer=吉尔伽美什}
{lancer=库丘林, saber=阿尔托莉雅潘德拉贡, archer=吉尔伽美什}
{lancer=库丘林, saber=阿尔托莉雅潘德拉贡, archer=吉尔伽美什, rider=美杜莎}
{lancer=库丘林, saber=阿尔托莉雅潘德拉贡, archer=吉尔伽美什}
lancer:库丘林
saber:阿尔托莉雅潘德拉贡
archer:吉尔伽美什
原文:https://www.cnblogs.com/woshi123/p/12504502.html