guava包中提供了Multiset接口,这个接口没有实现java.util.Set接口,Set接口规定里面是不能够放入重复的元素,如果放入重复元素会被覆盖掉的;然而Multiset接口却是可以放入重复元素的,Set接口中的元素是[1,2,3],Multiset中确可以[1✖️2,2✖️3,3✖️3]来表示多个相同的元素。
1 Multiset接口的HashMultiset实现类对象创建
Multiset<Integer> set = HashMultiset.<Integer>create();
- 向Multiset集合中添加一个元素
set.add(1);
输出结果是:
[1]
- 向Multiset中添加指定个数的元素
set.add(2, 3);
输出结果是:
[1, 2 x 3]
- 返回给定元素参数个数
int count = set.count(2);
- 移除一个指定的元素,其对应的count数量会相对减一
set.remove(2);
- 移除指定个数的元素
set.remove(2,1);
- 将不同的元素放入同一个Set中去
Set<Integer> set1 = set.elementSet();
- 设定指定元素重复的次数
int num = set.setCount(4, 2);
- 将符合原有重复个数的元素修改为新的重复次数
set.setCount(4, 2, 3);
- 保留出现在给定集合参数的所有的元素
set.retainAll(Arrays.asList(1));
- 去除出现给给定集合参数的所有的元素
set.removeAll(Arrays.asList(1));
2.ImmutableMultiset不可变对象实现类,主要有三个方法组成of、builder、copyof
Multiset<Integer> set = ImmutableMultiset.<Integer>of();
Multiset<Integer> set1 = ImmutableMultiset.<Integer>builder().build();
Multiset<Integer> set2 = ImmutableMultiset.<Integer>copyOf(set);
MultiSet接口的实现方式有很多,HashMultiSet、ImmutableMultiset只是其中的两种实现方式,其它的实现方式有如下几种:
LinkedHashMultiset、TreeMultiset等实现方式