我需要一个像 STL 多重集一样工作的数据结构,但 Java 中的 TreeSet 不允许重复元素。Java中是否有任何内置的数据结构相当于multiset?
问问题
32227 次
7 回答
37
使用Map<E, Integer>
where Integer is count 是 Multiset 的一个很好的替代品,它也不需要任何第三方库。
更新:如果您真的想将对象存储两次,请使用带有 Map 之类的 List Map<E, List<E>>
。
于 2013-12-01T13:43:33.690 回答
19
标准 Java 库中没有 Multiset。您应该使用包含 Multiset 类的 Google Guava 框架。 看
于 2012-09-24T13:09:15.620 回答
2
Apache Commons Collections具有Bag
和SortedBag
接口。听起来TreeBag
可能满足您的需求,但有很多实现可供选择。
于 2012-09-24T13:12:58.050 回答
1
您可以使用 PriorityQueue 元素按其自然顺序排序,或者如果您提供一个,则按比较器排序,并且允许重复。
于 2018-10-13T02:44:53.223 回答
0
从 1.8 开始,Map 允许你这样做:
map.computeIfAbsent(key, k -> new HashSet<V>()).add(v);
每个值都被添加到一个集合中,该集合是按需创建的。
您可能还需要更改 remove() 。
于 2020-12-18T18:49:49.593 回答
-1
TreeSet<Integer> set = new TreeSet<>();
TreeSet<Integer> multiset = new TreeSet<>((i, j) -> i < j ? 1 : -1);
只需制作 1 != 1!
于 2018-01-17T18:15:23.713 回答