Guava工具类中一些集合和方法的使用
Multiset:无序可重复set,重复元素显示个数 还是挺有用的数据结构
@Test void test5() { String s = "good good study day day up"; String[] s1 = s.split(" "); HashMultiset<String> multiset = HashMultiset.create(); multiset.addAll(Arrays.asList(s1)); System.out.println(multiset);//[study, up, good x 2, day x 2] multiset.forEach(e -> { System.out.println(e + "->" + multiset.count(e)); /* study->1 up->1 good->2 good->2 day->2 day->2 */ }); }
Multimap:key可重复的map(我理解就是Map<String, Set<String>这种结构)
@Test
void test6() {
//需求:统计每个作者有几本书
HashMap<String, String> map = new HashMap<>();
map.put("Java从入门到精通", "bin"); //书名:作者
map.put("Java从入门到精通", "bin"); //书名:作者
map.put("Android从入门到精通", "bin"); //书名:作者
map.put("PHP从入门到精通", "jack"); //书名:作者
map.put("笑看人数", "vince"); //书名:作者
Multimap<String, String> mmap = ArrayListMultimap.create();
Iterator<Map.Entry<String, String>> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<String, String> next = iterator.next();
mmap.put(next.getValue(), next.getKey());
}
System.out.println(mmap);//{bin=[Java从入门到精通, Android从入门到精通], vince=[笑看人数], jack=[PHP从入门到精通]}
Set<String> strings = mmap.keySet();
strings.forEach(e -> {
System.out.println(e + " -> " +mmap.get(e));
});
/**
* bin -> [Java从入门到精通, Android从入门到精通]
* vince -> [笑看人数]
* jack -> [PHP从入门到精通]
*/
}
BiMap: 可以反转的map, key相同插入会覆盖之前的。(适用场景:手机号和微信号一对一)
@Test void test1() { BiMap<String, String> biMap = HashBiMap.create(); biMap.put("13453455561", "wx132131"); biMap.put("13453455562", "wx132132"); biMap.put("13453455563", "wx132133"); biMap.put("13453455563", "wx132134"); System.out.println(biMap); //{13453455561=wx132131, 13453455562=wx132132, 13453455563=wx132134} System.out.println(biMap.get("13453455561"));//wx132131 BiMap<String, String> inverse = biMap.inverse(); System.out.println(inverse.get("wx132131"));//13453455561 System.out.println(inverse);//{wx132131=13453455561, wx132132=13453455562, wx132134=13453455563} System.out.println(biMap.inverse().inverse() == biMap);//true }
求集合交集、并集、差集,非常好用
@Test void test4() { HashSet<Integer> set1 = Sets.newHashSet(1, 2, 3); HashSet<Integer> set2 = Sets.newHashSet(3, 4, 5); Sets.SetView<Integer> intersection = Sets.intersection(set1, set2); System.out.println(intersection); //[3] Sets.SetView<Integer> difference = Sets.difference(set1, set2); System.out.println(difference);//[1, 2] Sets.SetView<Integer> union = Sets.union(set1, set2); System.out.println(union);//[1, 2, 3, 4, 5] }
未完待续......
标签:
java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)