HashSet与ArrayList速度? 插入vs查找(Java)

看看这个问题 ,我很好奇使用哪个,Hashset vs ArrayList。 Hashset似乎有更好的查找,ArrayList有更好的插入(对于许多对象)。 所以我的问题是,因为我无法使用ArrayList插入,然后使用HashSet搜索它,我将不得不选择其中一个。 使用ArrayList插入,转换为HashSet进行查找,总体上是SLOWER还是只是插入HashSet然后查找? 或者只是坚持使用ArrayList,虽然查找更糟糕,插入可以弥补吗?

这在很大程度上取决于集合的大小和使用方式。 也就是说,您可以重复使用相同的HashSet进行复制,这样可以节省您的时间。 或者你可以让它们保持最新状态。

为每个元素查找创建HashSet副本总是会变慢。

您还可以使用LinkedHashSet ,它具有快速插入和HashSet的查找速度,但代价是内存消耗和O(N) index(int)操作稍差。

您必须根据具体应用决定哪种权衡得到更好的回报。 你是先插入所有东西,然后花费其余的时间查找,也许偶尔会添加一些? 使用HashSet 。 你有很多重复,你必须压制吗? HashSet另一个优点。 你是否一直插入很多东西并且偶尔进行查找? 然后使用ArrayList 。 等等,还有更多的组合,在某些情况下,你必须对它进行基准测试才能看到。

这完全取决于您的使用案例。 如果正确实现hashCode方法, HashSet的插入操作也是O(1)操作。 如果您不需要随机访问元素(使用索引),并且您不需要重复项,那么HashSet将是更好的选择。