关于guava的HashMultiset、ListMultimap、Multiset、SetMultimap、ArrayListMultimap、BiMap、HashBiMap使用
guava所提供的这些真正意义来讲不属于Map
1.Multimap:key重复,但是value返回数组
业务场景:封装成Map后,要对某一个key进行分组平铺
Multimap<String,String> multimap = HashMultimap.create(); multimap.put("xxx","aaa"); multimap.put("xxx","bbb"); multimap.put("xxx","ccc"); Collection<String> values = multimap.get("xxx"); System.out.println(values);
运行结果:[aaa, ccc, bbb]
2. ListMultimap、ArrayListMultimap
:同上,只是加了泛型(Collection 转成 LIST)
ListMultimap<String,String> listMultimap = ArrayListMultimap.create(); listMultimap.put("xxx","aaa"); listMultimap.put("xxx","bbb"); listMultimap.put("xxx","ccc"); List<String> strings = listMultimap.get("xxx"); System.out.println(strings);
ArrayListMultimap<Integer,Object> listMap = ArrayListMultimap.create(); listMap.put(1, "hello"); listMap.put(3, "test"); listMap.put(1, "guava"); listMap.put(2, "stydy"); System.out.println(listMap.get(1));
运行结果:[aaa, ccc, bbb]
3.SetMultimap:与上面类似,List转Set
SetMultimap<String,String> setMultimap = HashMultimap.create(); setMultimap.put("xxx","aaa"); setMultimap.put("xxx","vvv"); setMultimap.put("xxx","sss"); setMultimap.put("xxx","aaa"); Set<String> sets = setMultimap.get("xxx"); System.out.println(sets);
运行结果:[aaa, vvv, sss]
4.asMap()方法:将上述对象的Key进行hash排序
// 返回的数据结构为:集合中存放集合,按照1,2,3自然顺序排序 Multimap<Integer, Object> multimap = ArrayListMultimap.create(); multimap.put(1, "hello"); multimap.put(3, "test"); multimap.put(1, "guava"); multimap.put(2, "stydy"); System.out.println(multimap.asMap()); for (Map.Entry<Integer, Object> entry : multimap.entries()){ Integer key = entry.getKey(); Object value = entry.getValue(); System.out.println(key + " " + value); }
运行结果:
{1=[hello, guava], 2=[stydy], 3=[test]}
1 hello
1 guava
2 stydy
3 test
5..count(key) 查看key重复数量
Multiset<Integer> mset = HashMultiset.create(); mset.add(3); mset.add(1); mset.add(1); mset.add(2); System.out.println(mset.count(1)); System.out.println(mset); for(Integer i: mset){ System.out.print(i); }
运行结果:2 [1 x 2, 2, 3] 1123
6.BiMap:双向的map,可以通过key查value(key同map会覆盖),也可以通过value查key(value不能重复,不然会报错)
BiMap<String,Integer> biMap = HashBiMap.create(); biMap.put("hezhong1",1); biMap.put("hezhong1",55); biMap.put("hezhong2",2); //biMap.put("xxx",2);//2重复会报错 biMap.put("hezhong3",3); System.out.println(biMap.get("hezhong1")); System.out.println(biMap.inverse().get(2));
返回结果:
55
hezhong2
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?