guava中Multiset、HashMultiset使用分析

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等实现方式

猜你喜欢

转载自blog.csdn.net/yaomingyang/article/details/80956081