看着这个问题,我对使用 Hashset 和 ArrayList 感到好奇。Hashset 似乎有更好的查找和 ArrayList 有更好的插入(对于许多对象)。所以我的问题是,由于我不能使用 ArrayList 插入,然后使用 HashSet 搜索它,我将不得不选择其中一个。使用 ArrayList 插入,转换为 HashSet 进行查找,总体上会比插入 HashSet 然后查找要慢吗?或者只是坚持使用 ArrayList,虽然查找更糟,但插入弥补了它?
问问题
4563 次
3 回答
2
这在很大程度上取决于集合的大小和您使用它的方式。即你可以重复使用相同HashSet
的复制,这会节省你的时间。或者,您可以让它们保持最新状态。
为每个元素查找创建一个HashSet
副本总是会比较慢。
您还可以使用LinkedHashSet
具有快速插入和HashSet
查找速度的选项,但内存消耗和O(N)
index(int)
操作会稍差一些。
于 2013-11-07T15:54:24.927 回答
1
这完全取决于您的用例。如果你hashCode
正确地实现了方法,那么插入操作HashSet
也是一个O(1)
操作。如果您不需要随机访问元素(使用索引),并且您不想要重复,那HashSet
将是一个更好的选择。
于 2013-11-07T15:50:31.377 回答
1
您必须为您的特定应用决定哪种权衡更能带来回报。您是先插入所有内容,然后将其余时间花在查找上,或者偶尔添加一些吗?使用HashSet
. 你有很多重复,你必须压制吗?的另一个强项HashSet
。您是否一直插入很多内容并且只偶尔进行查找?然后使用ArrayList
. 依此类推,还有更多组合,在某些情况下,您必须对其进行基准测试才能看到。
于 2013-11-07T15:49:11.760 回答