我的编程空间,编程开发者的网络收藏夹
学习永远不晚

guava中Multimap、HashMultimap用法小结

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

guava中Multimap、HashMultimap用法小结

在介绍Multimap之前我们先说一下Map,Map是一个key、value类型的键值对集合,集合中key不可以重复,但value可以重复,如果我们想在Map集合中存入一个相同的key,不同的value值得时候就必须使用 Map<Integer,,list<Object>>Map<Integer,List<Object>>模式来存数据,这样做很麻烦,而且编程效率又很低;

1. 现在我们来介绍一种更高效的集合Multimap

它可以很简单的实现上面我们所说的功能,先看下Multimap接口的源码

@GwtCompatible
public interface Multimap<K, V> {
  //返回Multimap集合的key、value pair的数量  
  int size();
  //判断Multimap是否包含key、value pair
  boolean isEmpty();
  //判断Multimap中是否包含指定key的value值
  boolean containsKey(@Nullable Object key);
  //判断Multimap中是否包含指定value的key
  boolean containsValue(@Nullable Object value);
  //判断Multimap中是否包含指定的key-value pair的数据
  boolean containsEntry(@Nullable Object key, @Nullable Object value);
  //将数据加入到Multimap中
  boolean put(@Nullable K key, @Nullable V value);
  //删除Multimap中指定key-value pair
  boolean remove(@Nullable Object key, @Nullable Object value);
  //将指定的key-集合数据加入Multimap中
  boolean putAll(@Nullable K key, Iterable<? extends V> values);
  //将指定的Multimap和当前的Multimap合并
  boolean putAll(Multimap<? extends K, ? extends V> multimap);
  //替换指定key的value
  Collection<V> replaceValues(@Nullable K key, Iterable<? extends V> values);
  //删除Imultimap中的指定key数据
  Collection<V> removeAll(@Nullable Object key);
  //清空Imultimap中的数据
  void clear();
  //获取指定key的值
  Collection<V> get(@Nullable K key);
  //获取所有的key集合
  Set<K> keySet();

  Multiset<K> keys();

  Collection<V> values();

  Collection<Map.Entry<K, V>> entries();

  Map<K, Collection<V>> asMap();

  @Override
  boolean equals(@Nullable Object obj);

  @Override
  int hashCode();
}

Multimap接口的实现类HashMultimap使用方法详解

  • 创建HashMultimap对象
Multimap<Integer, Integer> map = HashMultimap.<Integer, Integer>create();
        map.put(1, 2);
        map.put(1, 2);
        map.put(1, 3);
        map.put(1, 4);
        map.put(2, 3);
        map.put(3, 3);
        map.put(4, 3);
        map.put(5, 3);
        System.out.println(map);
{1=[4, 2, 3], 2=[3], 3=[3], 4=[3], 5=[3]}

从上面的结果集可以看出,key不可以重复,相同key的key-value pair 的value值是放在同一个数组中,相同的value会去重。

  • 常用的方法示例
 //判断集合中是否存在key-value为指定值得元素
        System.out.println(map.containsEntry(1, 2));
        System.out.println(map.containsEntry(1, 6));
        //获取key为1的value集合
        Collection<Integer> list = map.get(1);
        System.out.println(list);
        //返回集合中所有key的集合,重复的key将会用key * num的方式来表示
        Multiset<Integer> set = map.keys();
        System.out.println(set);
        //返回集合中所有不重复的key的集合
        Set<Integer> kset = map.keySet();
        System.out.println(kset);
true
false
[4, 2, 3]
[1 x 3, 2 x 2, 3, 4, 5]
[1, 2, 3, 4, 5]

replaceValues替换Multimap中指定key的值

Collection<Integer> coll = map.replaceValues(1, Arrays.asList(1,7,8,9,10));
        System.out.println(coll);
        System.out.println(map);
[4, 2, 3]
{1=[8, 9, 1, 10, 7], 2=[4, 3], 3=[3], 4=[3], 5=[3]}

replaceValues方法会替换掉key的value值,并且返回之前对应的值。

2. ImmutableMultimap不可变集合

ImmutableMultimap中提供了三个主要的静态方法of、builder、copyof;

 //创建一个静态不可变的Multimap对象
        Multimap<Integer, Integer> map = ImmutableMultimap.<Integer, Integer>of();
        Multimap<Integer, Integer> map1 = ImmutableMultimap.<Integer, Integer>builder().build();
        //从另外一个集合中复制数据元素到Multimap对象中
        Multimap<Integer, Integer> map2 = ImmutableMultimap.copyOf(map);

3.LinkedHashMultimap实现类

LinkedHashMultimap实现类与HashMultimap类的实现方法一样,唯一的区别是LinkedHashMultimap保存了记录的插入顺序,在使用Iterator循环遍历的时候先得到的肯定是先放入Multimap中的数据。

 Multimap<Integer, Integer> map = LinkedHashMultimap.<Integer, Integer>create();
        map.putAll(4, Arrays.asList(5,3,4,2,1,56));
        map.putAll(3, Arrays.asList(3,4,2,6,8,7));
        map.put(1, 2);
        System.out.println(map);

运行结果是:

{4=[5, 3, 4, 2, 1, 56], 3=[3, 4, 2, 6, 8, 7], 1=[2]}

4.TreeMultimap实现类

TreeMultimap类继承成了Multimap接口,它的所有方法跟HashMultimap一样,但是有一点不同的是该类实现了SortedSetMultimap接口,该接口会将存入的数据按照自然排序,默认是升序。

 Multimap<Integer, Integer> map = TreeMultimap.<Integer, Integer>create();
        map.putAll(4, Arrays.asList(5,3,4,2,1,56));
        map.putAll(3, Arrays.asList(3,4,2,6,8,7));
        map.put(1, 2);
        System.out.println(map);

返回的结果是:

{1=[2], 3=[2, 3, 4, 6, 7, 8], 4=[1, 2, 3, 4, 5, 56]}

Multimap接口的实现类不仅仅只有HashMultimap、TreeMultimap、LinkedHashMultimap、ImmutableMultimap这几种,还有其它的实现类,我会在以后的学习过程中详解。

到此这篇关于guava中Multimap、HashMultimap使用详解的文章就介绍到这了,更多相关guava中Multimap、HashMultimap使用内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

guava中Multimap、HashMultimap用法小结

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python中f‘{}‘用法小结

这篇文章主要介绍了python中f‘{}‘用法,f’{}’用法等同于format用法的简单使用,更加方便,本文给大家详细讲解,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-03-01

Java中BigInteger用法小结

这篇文章主要介绍了Java中BigInteger用法的详解,在这里,我们详细描述下BigInteger的用法,在使用之前,我们需要导入java.math.*包,本文通过实例代码相结合给大家详细讲解,需要的朋友可以参考下
2023-03-07

TypeScript中括号用法小结

本文主要介绍了TypeScript中括号用法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-05-16

SpringBoot中ApplicationEvent和ApplicationListener用法小结

这篇文章介绍SpringBoot中ApplicationEvent用法,注意ApplicationEvent和MQ队列虽然实现的功能相似,但是MQ还是有其不可替代性的,最本质的区别就是MQ可以用于不同系统之间的消息发布,而SpringEvent这种模式只能在一个系统中,需要的朋友可以参考下
2023-03-09

Python中argparse基本用法小结

这篇文章介绍了Python中argparse模块的基本用法,用于解析命令行参数。它提供了一个清晰的概述,包括:创建ArgumentParser对象添加不同类型的参数(必需、可选、标志、参数)解析参数并访问已解析参数的高级用法包括:限制参数出现次数排除互斥的参数组创建自定义类型故障处理
Python中argparse基本用法小结
2024-04-02

zip在python中的用法小结

zip()函数用于配对多个可迭代对象中的元素,返回元组列表。语法为zip(iterables),其中iterables是可迭代对象的元组。zip()可接受可变数量的可迭代对象,返回的元组列表长度等于最短的可迭代对象。它支持星号参数,按元素数量配对,并可与itertools模块中的zip_longest()函数结合使用。需要注意其性能影响,对于大可迭代对象应考虑使用迭代器或生成器。
zip在python中的用法小结
2024-04-02

Pythonargparse中的action=store_true用法小结

这篇文章主要介绍了Pythonargparse中的action=store_true用法小结,本文结合示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-02-10

springjdbctemplate的用法小结

jdbcTemplate是spring框架中提供的一个对象,是对原始繁杂的jdbc对象的简单封装,本文通过实例代码介绍springjdbctemplate的用法小结,需要的朋友可以参考下
2023-05-16

pandas DataFrame.to_sql()用法小结

PandasDataFrame.to_sql()方法用于将DataFrame写入关系型数据库。语法为DataFrame.to_sql(name,con,**kwargs),其中name为输出表名,con为数据库连接,kwargs为可选参数。参数包括schema(模式),if_exists(表已存在时的行为),index(是否将索引写入附加列),chunksize(分块写入大小),dtype(自定义列类型转换)。用法示例包括连接数据库、追加数据、写入索引、指定模式、分块写入和自定义类型转换。提示建议使用if
pandas DataFrame.to_sql()用法小结
2024-04-02

Mysql exists用法小结

简介EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False。 EXISTS 指定一个子查询,检测行的存在。语法:EXISTS subquery。参数 subquery 是一个受限的
2022-05-29

JAVA中STRING的常用方法小结

这篇文章介绍了JAVA中STRING的常用方法,有需要的朋友可以参考一下
2022-11-15

Shell编程中Shift的用法小结

位置参数可以用shift命令左移。比如shift 3表示原来的$4现在变成$1,原来的$5现在变成$2等等,原来的$1、$2、$3丢弃,$0不移动。不带参数的shift命令相当于shift 1。 非常有用的 Unix 命令:shift。我们
2022-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录