检查java中是否存在项目由O(1)设置

时间:2014-12-28 11:54:10

标签: java set

我正在使用Set个项目。

Set<Objects> myObjects

Set可能包含数千项。对我来说,重要的是可以通过O(1)检查此Set中项目的存在。

我知道contains有一种Set方法,但它的工作顺序是什么?它是否由O(1)工作?

如果效率不高,如何通过O(1)检查存在?

2 个答案:

答案 0 :(得分:5)

HashSet.contains()的预计运行时间为O(1)

来自Javadoc

  

此类为基本操作(添加,删除,包含和大小)提供恒定的时间性能,假设散列函数在桶之间正确地分散元素。迭代此集合需要的时间与HashSet实例的大小(元素数量)加上&#34;容量&#34;的总和成正比。支持HashMap实例(桶的数量)。因此,如果迭代性能很重要,则不要将初始容量设置得太高(或负载因子太低)非常重要。

答案 1 :(得分:1)

Set - 实施HashSet预计会按O(1)查找值。但是,这意味着您存储的对象提供hashCode

在Java 8中,您可以使用以下代码提供良好且高效的哈希:

Objects.hash(value1, value2, value3);

如果使用得当contains - HashSet的方法应该按预期工作(这非常快;)。