一、Multiset简介
在JDK中,List 和 Set 有一个基本的区别,就是 List 可以包含多个相同对象,且是有顺序的,而 Set 不能有重复,且不保证顺序(有些实现有顺序,例如 LinkedHashSet 和 SortedSet等)所以 Multiset 占据了 List 和 Set 之间的一个灰色地带:允许重复,但是不保证顺序。事实上,Multiset 并没有实现 java.util.Set 接口,它更像是一个 Bag。普通的 Set 就像这样:[car, ship, bike],而 Multiset 会是这样:[car x 2, ship x 6, bike x 3]。
二、常用方法
官方文档:https://google.github.io/guava/releases/27.0.1-jre/api/docs/com/google/common/collect/Multiset.html
修饰符和类型 | 方法描述 |
boolean | add(E element) 向其中添加单个元素. |
int | add(E element, int occurrences) 增加给定元素在Multiset中的计数 |
boolean | contains(@Nullable Object element) 是否包含元素. |
boolean | containsAll(Collection<?> elements) 如果这个多集至少包含一个出现的指定集合中的所有元素. |
int | count(@Nullable Object element) 返回给定参数元素的个数. |
Set<E> | elementSet() Multiset中不重复元素的集合,类型为Set |
Set<Multiset.Entry<E>> | entrySet() 和Map的entrySet类似,返回Set<multiset.entry>,其中包含的Entry支持getElement()和getCount()方法 |
boolean | equals(@Nullable Object object) 比较指定对象与此multiset是否相等. |
default void | forEach(Consumer<? super E> action) 元素遍历. |
default void | forEachEntry(ObjIntConsumer<? super E> action) 为此多集中的每个不同元素运行指定的操作,以及该元素的出现次数。 |
int | hashCode() 返回此multiset的哈希码. |
Iterator<E> | iterator() 返回一个迭代器,包含Multiset的所有元素(包括重复的元素) |
boolean | remove(@Nullable Object element) 移除一个元素,其count值 会响应减少. |
int | remove(@Nullable Object element, int occurrences) 减少给定元素在Multiset中的计数 |
boolean | removeAll(Collection<?> c) 去除出现给给定集合参数的所有的元素. |
boolean | retainAll(Collection<?> c) 保留出现在给定集合参数的所有的元素. |
int | setCount(E element, int count) 设置给定元素在Multiset中的计数,不可以为负数. |
boolean | setCount(E element, int oldCount, int newCount) 将符合原有重复个数的元素修改为新的重复次数. |
int | size() 返回所有元素的总个数(包括重复的元素) |
default Spliterator<E> | spliterator() 在此集合中的元素上创建Spliterator. |
String | toString() 返回该对象的字符串表示. |
从接口 java.util.Collection 继承的方法有:addAll, clear, isEmpty, parallelStream, removeIf, stream, toArray