multivaluemap的使用,
目录
1.现在我们来介绍一种更高效的集合多地图2。不可变地图不可变集合3.linkedhashmultimemap实现类4.TreeMultimap实现类在介绍多地图之前我们先说一下地图,地图是一个关键、价值类型的键值对集合,集合中键不可以重复,但价值可以重复,如果我们想在地图集合中存入一个相同的钥匙,不同的价值值得时候就必须使用映射整数,列表对象映射整数,列表对象模式来存数据,这样做很麻烦,而且编程效率又很低;
1. 现在我们来介绍一种更高效的集合Multimap
它可以很简单的实现上面我们所说的功能,先看下多地图接口的源码
@GwtCompatiblepublic接口MultimapK,V { //返回多地图集合的键、值对的数量int size();//判断多地图是否包含钥匙,值对布尔型isEmpty();//判断多地图中是否包含指定键的价值值布尔包含键(@ Nullable Object key);//判断多地图中是否包含指定价值的布尔键包含值(@可空对象值);//判断多地图中是否包含指定的键值对的数据boolean包含条目(@ Nullable对象键,@ Nullable对象值);//将数据加入到多地图中布尔放(@可空英语字母表中第十一个字母键,@可空英语字母表中第二十二个字母值);//删除多地图中指定键值对布尔remove(@ Nullable Object key,@ Nullable Object value);//将指定的关键-集合数据加入多地图中布尔putAll(@Nullable K key,Iterable?扩展英语字母表中第二十二个字母值);//将指定的多地图和当前的多地图合并布尔putAll(Multimap?扩展k,扩展英语字母表中第二十二个字母多重映射);//替换指定键的值集合v替换值(@ Nullable K key,Iterable?扩展英语字母表中第二十二个字母值);//删除Imultimap中的指定键数据collection v remove all(@ Nullable Object key);//清空Imultimap中的数据void clear();//获取指定键的值集合v get(@ Nullable K key);//获取所有的键集合SetK keySet();multisk keys();集合v值();CollectionMapEntryK,V entries();MapK,collection v asMap();@ Override boolean equals(@ Nullable Object obj);@ Override int hashCode();}多地图接口的实现类HashMultimap使用方法详解
创建HashMultimap对象MultimapInteger,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);系统。出去。println(地图);{1=[4, 2, 3], 2=[3], 3=[3], 4=[3], 5=[3]}从上面的结果集可以看出,键不可以重复,相同动能(动能energy)键入错误(关键错误)
y的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);
truefalse[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使用内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。