Map集合基础知识点整理

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的常用方法

  • get(Object key) 根据key获取对应的value值,当key不存在时,返回null值
  • containsKey(Object key) Map集合中是否包含指定的key 返回true或者false
  • containsValue(Object value) Map集合中是否包含一个或者多个 value 返回true或者false
  • entrySet() 返回Map集合中包含的所有key-value键值对所组成的Set集合,每个集合元素都为Map内部类Entry的对象
  • clear() 清除集合中所有的键值对
  • keySet() 返回Map中所有key组成的Set集合
  • put(Object key, Object value) 添加一个key-value键值对,若集合中存在有一个相同的key,则新添加的value将会覆盖之前key所对应的value值
  • putAll(Map m) 将指定Map集合复制到本Map中
  • remove(Object kye) 删除集合中的key所对应的key-value键值对,当key对应的键值对不存在,该方法返回false
  • values() 返回Map集合中所有 value组成的Collection集合

除此之外Map中还有一个内部类Entry,封装一个key-value对

  1. getKey() 返回Entry包含的key
  2. getValue() 返回Entry包含的value值
  3. setValue(V value) 设置该Entry里包含的value值,返回被覆盖的value值

在这里插入图片描述
Java 8 中Map新增的方法

		Map myMap = new HashMap();
        for (int i = 0; i < 4 ; i++) {
            myMap.put("元素--"+i,i);
        }
  • compute(Object key , BiFunction remappingFunction) 使用remappingFunction根据原key-value 计算一个新的value .当新value不为null,将覆盖原来的value,当原value不为null .新value为null ,则直接删除原来的key-value键值对.当新、旧value都为 null,该方法不改变任何key-value对,直接返回null
			 myMap.compute("元素--1", (key,value)-> (Integer)value  -   (Integer)value);
  • computeIfAbsent(Object key , Function mappingFunction) 当参数key对应的value值为null,则使用mappingFunction根据key计算一个新结果,结果不为null,则该结果作为参数key对应的新value,当Map中不包含该key,则组成一个新的key-value对放入集合中
		 //key不存在,根据key计算 一个新值作为key对应的value被放入集合中
        myMap.computeIfAbsent("元素--5",key -> key.hashCode());
  • computeIfPresent(Object key , BiFunction mappingFunction) 当key参数在Map集合中对应的value值不为空,mappingFuncation根据key跟key对应的value计算一个新的结果,结果 不为null ,覆盖原value,否则删除key-value对
 		 //另value为null  结果删除key-value对
        myMap.computeIfPresent("元素--5",(key,value) ->  value=null);
  • forEach(BiConsumer action) 新增的一种遍历Map集合的方法
		 myMap.forEach((key,value) -> System.out.println(key + "===" + value));
  • getOrDefault(Object key , V defaultValue) 根据key获取指定value,当前key不存在,返回defaultValue
		System.out.println(myMap.getOrDefault("元素--6",20));
  • meger(Object key,Object newValue , BiFunction remappingFunction) 根据指定key获取value,当获取到的value为null时,使用新newValue 替代原value,这时可能会生成一对新的key-value.当获取到的value不为null,新value、原value根据remappingFunction计算出一个新的value值替换key对应的原value
       //key对应的value值变为 获取到的value * ( newValue ==  4 )
        myMap.merge("元素--2",4,(value,newValue) -> (Integer)value * (Integer) newValue );
  • putIfAbsent(Object key , V value ) 检测key对应的value值是否为null , 当value为null 则使用value作为key的新value值
		//另value为null  结果删除key-value对
        myMap.put("元素--2",null);
        //检测获取的value是否为null  为null  使用value参数替代null值
        myMap.putIfAbsent("元素--2",20);
  • replace(Object key, V oldV, V newV) 将指定key-oldV对 替换成 key-newV 对
		myMap.replace("元素--2",2,50);
  • replaceAll(BiFunction action) 使用action对Map中原key-value对进行计算,使用计算结果作为key-value的新value值
 		//key、value根据特定算法计算新结果  将新结果作为key对应的新value值
        myMap.replaceAll((key,value) -> key.hashCode() * (Integer)value);

        myMap.forEach((key,value) -> System.out.println(key +" ==" + value));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值