【发布时间】:2013-09-09 20:55:24
【问题描述】:
我有一个保证是不同的对象的集合(特别是由唯一的整数 ID 索引)。我也确切地知道其中有多少(并且数量不会改变),并且想知道 Array 在存储/检索所述元素方面是否会比 HashSet 具有显着的性能优势。
在纸面上,Array 保证了恒定的时间插入(因为我提前知道了大小)和检索,但是 HashSet 的代码看起来更简洁并增加了一些灵活性,所以我想知道我是否会失去任何性能 -至少在理论上使用它是明智的。
【问题讨论】:
-
你的数据集是稀疏的还是密集的?
-
HashSet 被设计为具有预期的恒定时间
add、contains和remove操作,这意味着无论集合中有多少元素,时间都不会发生太大变化。数组对所有这些都有线性操作,但开销较低。这意味着数组通常更适合小型集合。不久前,我在我的机器上使用 ArraySet 实现做了一些测试,发现使用 Array 而不是 Hash 通常最多使用 150 个元素会更好(但这在一定程度上取决于实现和操作:迭代是例如更快)。 -
取决于你有多少项目EnumSet或类似的东西可能是一个选项。
标签: java arrays performance data-structures hashset