Java集合和包含
我宣读了声明: HashSet为基本操作(添加、删除、包含和大小)提供恒定的时间性能 这里的“包含”是真的吗? 虽然将bucket列入短名单是一种持续时间性能,但在bucket中查找元素不是一种o(n)操作吗Java集合和包含,java,hashset,Java,Hashset,我宣读了声明: HashSet为基本操作(添加、删除、包含和大小)提供恒定的时间性能 这里的“包含”是真的吗? 虽然将bucket列入短名单是一种持续时间性能,但在bucket中查找元素不是一种o(n)操作吗 我误解了什么吗?HashSet使用hasing函数来定位元素。在it中的求值是O(1) 例如,如果我们有一个用于存储员工姓名的哈希表,我们将使用该函数作为其中ASCII字符的总和: f(name) = sum(ascii chars) 及 f('ahmed')='a'+'h'+'m'+'
我误解了什么吗?HashSet使用hasing函数来定位元素。在it中的求值是O(1) 例如,如果我们有一个用于存储员工姓名的哈希表,我们将使用该函数作为其中ASCII字符的总和:
f(name) = sum(ascii chars)
及
f('ahmed')='a'+'h'+'m'+'e'+'d'=97+104+109+101+100=511。
因此,“ahmed”将被储存在511号位置。
但是,前面的哈希函数非常糟糕,当使用产生相同和的名称进行赋值时,会导致很多冲突。因此,在哈希表实现中,找到一个好的哈希函数是非常关键的目标
有关详细信息,请参阅数据结构。
HashSet
使用hasing函数定位元素。在it中的求值是O(1)
例如,如果我们有一个用于存储员工姓名的哈希表,我们将使用该函数作为其中ASCII字符的总和:
f(name) = sum(ascii chars)
及
f('ahmed')='a'+'h'+'m'+'e'+'d'=97+104+109+101+100=511。
因此,“ahmed”将被储存在511号位置。
但是,前面的哈希函数非常糟糕,当使用产生相同和的名称进行赋值时,会导致很多冲突。因此,在哈希表实现中,找到一个好的哈希函数是非常关键的目标
有关更多信息,请参阅数据结构。是的,正在
查找存储桶a o(n)操作中的元素。
包含
操作性能为O(n)。它使目标对象与HashSet中的所有其他对象相等是的它是在bucket a o(n)操作中查找元素
包含
操作性能为O(n)。它将目标对象与HashSet中的所有其他对象相等,如
假定散列函数将元素正确地分散在存储桶中,则此类为基本操作(添加、删除、包含和大小)提供恒定的时间性能
检查上面的假设部分。Contains是o(n),如果所有元素都在一个桶中结束,这将是世界上最差的哈希函数之一的结果。HashSet在内部使用HashMap。如
假定散列函数将元素正确地分散在存储桶中,则此类为基本操作(添加、删除、包含和大小)提供恒定的时间性能
检查上面的假设部分。Contains是o(n),如果所有元素都在一个桶中结束,这将是世界上最差的哈希函数之一的结果。HashSet在内部使用HashMap。o(n)中的n表示哈希中的元素数,而不是bucket中的元素数。由于存储桶中的元素数量不会随着集合的大小而线性增长,并且是有限的,因此可能需要的最大时间是恒定的。常数时间不影响符号。至少如果你有一个完美的散列函数,这完全是另一个问题。n in o(n)代表散列中的元素数,而不是bucket中的元素数。由于存储桶中的元素数量不会随着集合的大小而线性增长,并且是有限的,因此可能需要的最大时间是恒定的。常数时间不影响符号。至少如果你有一个完美的哈希函数,这完全是另一个问题。顾名思义
HashSet
是通过hasing
技术实现的。
这意味着找到一个对象的复杂性是O(1)。这就是为什么包含需要O(1)个时间。但在最坏的情况下,若所有对象都放在同一个bucket中,那个么复杂性将是O(n)
如果此集合包含指定的元素,则返回true。更正式地说,当且仅当该集合包含一个元素e时(o==null?e==null:o.equals(e))返回true
上面是HashSet类的contains方法。请注意,它使用map来存储对象。顾名思义HashSet
是通过hasing
技术实现的。
这意味着找到一个对象的复杂性是O(1)。这就是为什么包含需要O(1)个时间。但在最坏的情况下,若所有对象都放在同一个bucket中,那个么复杂性将是O(n)
如果此集合包含指定的元素,则返回true。更正式地说,当且仅当该集合包含一个元素e时(o==null?e==null:o.equals(e))返回true
上面是HashSet类的contains方法。请注意,它使用映射来存储对象
在铲斗中查找元件不是o(n)操作吗
那要看情况了。如果有太多的哈希冲突,算法必须遍历每个值并检索您感兴趣的值,那么在最坏的情况下,时间是o(n)。但是,它根本不是一个好的散列函数。一个好的散列函数将分配的散列平均分布在其整个范围内
如果始终返回相同的hashCode
,也可能发生这种情况,这也不是一个好迹象。无论集合的基数是多少,都会得到相同的哈希值
在铲斗中查找元件不是o(n)操作吗
那要看情况了。如果有太多的哈希冲突,算法必须遍历每个值并检索您感兴趣的值,那么在最坏的情况下,时间是o(n)。但是,它根本不是一个好的散列函数。一个好的散列函数将分配的散列平均分布在其整个范围内
如果始终返回相同的hashCode
,也可能发生这种情况,这也不是一个好迹象。那会给你带来更多的惊喜