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



看着这个问题,这让我很好奇该使用哪个,Hashset vs ArrayList。Hashset似乎有更好的查找,ArrayList有一个更好的插入(对于许多对象)。所以我的问题是,由于我无法使用 ArrayList 插入,然后使用 HashSet 搜索它,我将不得不选择一个或另一个。使用 ArrayList 插入,转换为 HashSet 进行查找,总体上会比插入 HashSet 然后查找慢吗?或者只是坚持使用 ArrayList,虽然查找更差,但插入弥补了它?

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

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

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

您必须针对您的特定应用程序决定哪种权衡效果更好。您是否先插入所有内容,然后花费其余时间查找,也许偶尔再添加一些?使用 HashSet .您是否有很多重复项,必须禁止显示?HashSet的另一个强项.您是否一直插入很多内容,只是偶尔查找一下?然后使用 ArrayList .依此类推,还有更多的组合,在某些情况下,您必须对其进行基准测试才能看到。

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

最新更新