guava中Multimap、HashMultimap用法小结
目录
- 1. 现在我们来介绍一种更高效的集合Multimap
- 2. ImmutableMultimap不可变集合
- 3.LinkedHashMultimap实现类
- 4.TreeMultimap实现类
【guava中Multimap、HashMultimap用法小结】
1. 现在我们来介绍一种更高效的集合Multimap 它可以很简单的实现上面我们所说的功能,先看下Multimap接口的源码
@GwtCompatiblepublic interface Multimap{//返回Multimap集合的key、value pair的数量int size(); //判断Multimap是否包含key、value pairboolean isEmpty(); //判断Multimap中是否包含指定key的value值boolean containsKey(@Nullable Object key); //判断Multimap中是否包含指定value的keyboolean 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 pairboolean 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的valueCollection replaceValues(@Nullable K key, Iterable extends V> values); //删除Imultimap中的指定key数据Collection removeAll(@Nullable Object key); //清空Imultimap中的数据void clear(); //获取指定key的值Collection get(@Nullable K key); //获取所有的key集合Set keySet(); Multiset keys(); Collection values(); Collection > entries(); Map > asMap(); @Overrideboolean equals(@Nullable Object obj); @Overrideint hashCode(); }
Multimap接口的实现类HashMultimap使用方法详解
- 创建HashMultimap对象
Multimapmap = HashMultimap. 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集合Collectionlist = map.get(1); System.out.println(list); //返回集合中所有key的集合,重复的key将会用key * num的方式来表示Multiset set = map.keys(); System.out.println(set); //返回集合中所有不重复的key的集合Set kset = map.keySet(); System.out.println(kset);
truefalse[4, 2, 3][1 x 3, 2 x 2, 3, 4, 5][1, 2, 3, 4, 5]
replaceValues替换Multimap中指定key的值
Collectioncoll = 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对象Multimapmap = ImmutableMultimap. of(); Multimap map1 = ImmutableMultimap. builder().build(); //从另外一个集合中复制数据元素到Multimap对象中Multimap map2 = ImmutableMultimap.copyOf(map);
3.LinkedHashMultimap实现类 LinkedHashMultimap实现类与HashMultimap类的实现方法一样,唯一的区别是LinkedHashMultimap保存了记录的插入顺序,在使用Iterator循环遍历的时候先得到的肯定是先放入Multimap中的数据。
Multimapmap = LinkedHashMultimap. 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接口,该接口会将存入的数据按照自然排序,默认是升序。
Multimapmap = TreeMultimap. 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使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- C#|C# 解决在Dictionary中使用枚举的效率问题
- 测试人员眼中的TCP/IP|iperf3使用说明
- 测试人员眼中的TCP/IP|iPerf3命令参数详解
- axios使用,在vue中的使用(私有和全局,封装api接口模块)
- 学好原生JS,在工作中多一份安全感
- C#中的==运算符用法讲解
- 图像处理|空间滤波-随机椒盐噪声-高斯噪声-均值滤波器-中值滤波器
- 2022成都车展|腾势中型SUV概念车成都车展全球首秀|一线车讯
- 索尼|索尼中国谢飚:技术不应是噱头,而是要构筑体验升级
- 阿里云 ACK One 多集群管理全面升级(多集群服务、多集群监控、两地三中心应用容灾)