2

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

4

3 回答 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 回答