我想存储一组允许重复的整数,例如1, 5, 3, 3, 4, 6
.
如果我使用 a HashSet
,则重复项将丢失。AList
感觉不对,因为这些项目没有暗示顺序。我需要能够从中间快速删除排除的项目ArrayList
。LinkedList
仍然暗示这些物品有一些我不喜欢的顺序。
我应该为此使用另一种数据结构吗?或者我应该告诉基于参考平等HashSet
进行比较?Integer
我知道我可以通过几种方式解决这个问题,但我对最“正确”的解决方案更感兴趣。
我想存储一组允许重复的整数,例如1, 5, 3, 3, 4, 6
.
如果我使用 a HashSet
,则重复项将丢失。AList
感觉不对,因为这些项目没有暗示顺序。我需要能够从中间快速删除排除的项目ArrayList
。LinkedList
仍然暗示这些物品有一些我不喜欢的顺序。
我应该为此使用另一种数据结构吗?或者我应该告诉基于参考平等HashSet
进行比较?Integer
我知道我可以通过几种方式解决这个问题,但我对最“正确”的解决方案更感兴趣。
如果这种依赖性不是问题,您可以使用Guava 的 multiset 。作为奖励,番石榴还有许多其他有用的通用实用程序。
这LinkedList
是要走的路。如果需要对其进行排序,可以使用Collections.sort()
;
使用多集风格的集合。由于某种原因,Java 库中缺少它,因此您需要Collection
自己直接实现或使用 Google Guava 的 MultiSet。
列表很好,开销也不错。如果您不关心订购,请不要使用它。
List
可以正常工作,它是解决您的问题的最简单的解决方案,没有任何主要缺点,而且这在大多数情况下对一些优雅但复杂的问题有利。
除此之外,请参阅此答案Set 集合中的重复值?