【问题标题】:HashSet - Is accessing/finding a object in HashSet O(1)? [duplicate]HashSet - 是否在 HashSet O(1) 中访问/查找对象? [复制]
【发布时间】:2017-03-29 15:29:58
【问题描述】:

访问数组中特定对象/数据的平均复杂度为 O(n) ,这里 n 是数组长度。 在 HashSet for Java 中查找元素是 O(1) 吗?

HashSet<String> set=new HashSet<String>();  
......
System.out.print(set.contains(Some_string);

contains(String) 方法的执行时间是否为 O(1)?

【问题讨论】:

标签: java arrays hashset


【解决方案1】:

是的。基本操作(添加、删除、包含和大小)在恒定时间内运行。

http://docs.oracle.com/javase/8/docs/api/java/util/HashSet.html

【讨论】:

  • 您省略了后缀“假设哈希函数将元素正确地分散在桶中”。实际上这个假设在一般情况下是错误的。
【解决方案2】:

是的,访问和查找 HashSet 中的元素是 O(1)。

HashSet 使用散列技术存储元素。 HashSet 的另一个重要属性是它只包含唯一元素。例如,您可以检查该元素是否已存在于 HashSet 中。

HashSet<Integer> hs = new HashSet<String();
if(hs.add(10) == false) {
  //do something
}

【讨论】:

  • 有一个contains() 方法。所以我们不需要做hs.add(10) == false。相反,我们可以这样做hs.contains(10)
猜你喜欢
  • 1970-01-01
  • 2012-09-24
  • 2017-08-18
  • 1970-01-01
  • 1970-01-01
  • 2013-05-15
  • 2014-01-02
  • 2011-01-19
  • 1970-01-01
相关资源
最近更新 更多