/**
* Multiset<E> 类似 Map<E,Integer> ,
* 比如存储一个wordcount, 某个对象和个数
* count(k): 返回该对象的个数,不存在返回 0
* size(): 总个数
*/
@Test
void test0() {
HashMultiset<@Nullable Object> m = HashMultiset.create();
m.add("a");
m.add("b");
m.add("c");
m.add("c");
m.add("d", 3);
System.out.println(m);//[a, b, c x 2, d x 3]
System.out.println(m.count("d"));//3
m.remove("c");
m.remove("d",2);
System.out.println(m);//[a, b, c, d]
System.out.println(m.size());//4
m.iterator().forEachRemaining(System.out::println);
}
/**
* Multimap<k,v> 类似 Map<k,Collection<v> > 例如 Map<k,List<v> >
* get(k): k不存在时返回一个 空集合
* 创建方式:
* 1,MultimapBuilder.xxx().xx().builder();
* 2,实现类.create()。例如ArrayListMultimap.create();
* asMap(): 返回 Map<k,Collection<v> >
*/
@Test
void test1() {
ListMultimap<@Nullable Object, @Nullable Object> m = MultimapBuilder.hashKeys().arrayListValues().build();
m.put(1, "a");
m.put(1, "b");
m.putAll(2, Arrays.asList("a", "b", "c"));
System.out.println(m);//{1=[a, b], 2=[a, b, c]}
System.out.println(m.get(1));//[a, b]
System.out.println(m.get(54));//[]
Map<@Nullable Object, Collection<@Nullable Object>> m2 = m.asMap();
System.out.println(m2);//{1=[a, b], 2=[a, b, c]}
}
/**
* BiMap<k,v> 类似 键值可以互换的Map<k,v>, 所以v不能重复。
* BiMap<k,v>的inverse(): BiMap<k,v> -> BiMap<v,k>
*/
@Test
void test2() {
HashBiMap<@Nullable String, @Nullable Integer> m = HashBiMap.create();
m.put("Tom", 17);
m.put("Jack", 18);
m.put("Lucy", 7);
//m.put("Tom",7);//键相同,值覆盖。 值相同,抛异常
m.forcePut("Tom", 7);//强制put。会覆盖掉 lucy--7
System.out.println(m);//{Tom=7, Jack=18}
BiMap<@Nullable Integer, @Nullable String> m2 = m.inverse();
System.out.println(m2);//{7=Tom, 18=Jack}
}
/**
* Table<r,c,v>,类似 Map<k,Map<k,v>>, 抽象的row,column,value,根据行列坐标确定值。
* row(r)-->Map<c,v>
* column(c)-->Map<r,v>
*/
@Test
void test3() {
HashBasedTable<String, String, Object> table = HashBasedTable.create();
table.put("wang", "1", "wang-1");
table.put("wang", "2", "wang-2");
table.put("wang", "3", "wang-3");
table.put("zhang", "1", "zhang-1");
table.put("zhang", "2", "zhang-2");
table.put("zhang", "4", "zhang-4");
table.put("zhang", "5", "zhang-5");
System.out.println(table.get("wang", "3"));//wang-3
System.out.println(table.row("wang"));//{1=wang-1, 2=wang-2, 3=wang-3}
System.out.println(table.column("2"));//{wang=wang-2, zhang=zhang-2}
}
guava的拓展Collection,Multiset,Multimap,BiMap,Table的简单理解和案例代码
最新推荐文章于 2024-02-16 09:51:34 发布