Java集合和包含

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为基本操作(添加、删除、包含和大小)提供恒定的时间性能

这里的“包含”是真的吗? 虽然将bucket列入短名单是一种持续时间性能,但在bucket中查找元素不是一种o(n)操作吗


我误解了什么吗?

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
,也可能发生这种情况,这也不是一个好迹象。那会给你带来更多的惊喜