看着这个问题,这让我很好奇该使用哪个,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
将是更好的选择。