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

时间:2013-11-07 15:44:12

标签: java arraylist hashset

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

3 个答案:

答案 0 :(得分:2)

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

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

您还可以利用LinkedHashSet快速插入和HashSet的查找速度,但需要更低的内存消耗和O(N) index(int)操作。< / p>

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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