Java中除了Collection树外,还有一个Map集合树,旗下分布着各种小弟
Map用于保存具有映射关系的数据,当个元素的数据结构呈 key-value 的键值对模式,key为键,value为值,两者都可以为任意类型的数据,其中key在集合中不允许重复,同一个Map中两个key的equals方法返回值总为false,而value是可重复的.所以根据 指定的key可以找 到唯一一个 对应的value
其实可以把Map集合的key-value键值对完全拆开两部分,一部分 key可以看成是不可重复的无序Set集合.,另一部分 value是可重复的List集合.其实有看源码的小伙伴会知道Java其实 先实现了Map,再通过包装一个所有value都为null值得Map实现Set集合.所以Map中的key存储形式与Set集合中 元素的存储形式完全相同
对于value而言,其key就可以作为该value的索引,通过索引获取value,嗯…很像List,只不过List集合的 索引为整数,这里的key则是以一个对象作为索引
下面看下Map的常用方法
除此之外Map中还有一个内部类Entry,封装一个key-value对
Map myMap = new HashMap();
for (int i = 0; i < 4 ; i++) {
myMap.put("元素--"+i,i);
}
myMap.compute("元素--1", (key,value)-> (Integer)value - (Integer)value);
//key不存在,根据key计算 一个新值作为key对应的value被放入集合中
myMap.computeIfAbsent("元素--5",key -> key.hashCode());
//另value为null 结果删除key-value对
myMap.computeIfPresent("元素--5",(key,value) -> value=null);
myMap.forEach((key,value) -> System.out.println(key + "===" + value));
System.out.println(myMap.getOrDefault("元素--6",20));
//key对应的value值变为 获取到的value * ( newValue == 4 )
myMap.merge("元素--2",4,(value,newValue) -> (Integer)value * (Integer) newValue );
//另value为null 结果删除key-value对
myMap.put("元素--2",null);
//检测获取的value是否为null 为null 使用value参数替代null值
myMap.putIfAbsent("元素--2",20);
myMap.replace("元素--2",2,50);
//key、value根据特定算法计算新结果 将新结果作为key对应的新value值
myMap.replaceAll((key,value) -> key.hashCode() * (Integer)value);
myMap.forEach((key,value) -> System.out.println(key +" ==" + value));