源码阅读之MultiMap

本文通过源码阅读,沿着Multimap、AbstractMultimap、AbstractListMultimap、ArrayListMultimap的继承树,探讨了Multimap的主要方法实现,如put、putAll、remove和replaceValues等,同时解释了Multimap作为Map<T,List>数据结构的特点。" 111490648,10295838,NSTimer深入解析:循环引用与解决策略,"['iOS开发', '内存管理', '定时器', 'NSTimer']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

** 沿着Multimap、AbstractMultimap、AbstractListMultimap、ArrayListMultimap这棵树看一下接口里各个方法的实现,再对比一下HashMultimap的实现 **

先写个栗子

//Multimap multimap1 = new ArrayListMultimap<Integer,Integer>(); ArrayListMultimap构造方法是私有的,不能这样声明
        Multimap<Integer,Integer> multimap = ArrayListMultimap.create();
        multimap.put(1,2);
        multimap.put(1,2);
        multimap.put(2,2);
        multimap.put(2,3);
        multimap.put(2,4);
        log.info("multimap.size={}",multimap.size());
        multimap.entries().stream().forEach(i -> log.info("result:{}",i));
        log.info(multimap.toString());
        log.info("--------------------");

        Multimap multimap1 = ArrayListMultimap.create();
        multimap1.put(1,Lists.newArrayList(1,3,3,3,5,7,9));
        multimap1.put(1,Lists.newArrayList(1,5,7,9));
        multimap1.put("2",Lists.newArrayList(1,3,5,7,9));
        multimap1.put(Lists.newArrayList(10,20),Lists.newArrayList(1,3,5,7,9));
        multimap1.entries().stream().forEach(i -> log.info("result:{}",i));
        log.info(multimap1.get("one").toString());

** 输出结果 **

21:29:43.311 [main] INFO - multimap.size=5
21:29:43.430 [main] INFO - result:1=2
21:29:43.430 [main] INFO - result:1=2
21:29:43.431 [main] INFO - result:2=2
21:29:43.431 [main] INFO - result:2=3
21:29:43.431 [main] INFO - result:2=4
21:29:43.431 [main] INFO - {1=[2, 2], 2=[2, 3, 4]}
21:29:43.431 [main] INFO - --------------------
21:29:43.442 [main] INFO - result:1=[1, 3, 3, 3, 5, 7, 9]
21:29:43.442 [main] INFO - result:1=[1, 5, 7, 9]
21:29:43.442 [main] INFO - result:2=[1, 3, 5, 7, 9]
21:29:43.442 [main] INFO - result:[10, 20]=[1, 3, 5, 7, 9]
21:29:43.443 [main] INFO - []

Multimap 可以理解成Map<T,List>这样的数据结构。key不可重复,value可以重复。

主要方法介绍:

  • put(K, V):添加键到单个值的映射
  • putAll(K, Iterable):依次添加键到多个值的映射
  • remove(K, V):移除键到值的映射;如果有这样的键值并成功移除,返回true
  • removeAll(K):清除键对应的所有值,返回的集合包含所有之前映射到K的值,但修改这个集合就不会影响Multimap了
  • replaceValues(K, Iterable):清除键对应的所有值,并重新把key关联到Iterable中的每个元素。返回的集合包含所有之前映射到K的值

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值