Java 对整数使用HashSet

Java 对整数使用HashSet,java,Java,我有两张单子。我想在两者中找出最小的公共数。我考虑过使用HashSet,因为它不允许重复。在添加两个列表元素时,我可以找到常见的数字。而HashSet插入只需要恒定时间。这可以给我O(n)找到两个最小的公共点。但是HashSet如何在常量时间中插入n元素呢?在这种情况下,添加最后一个元素需要O(n)时间,因为要找到正确的bucket,在最坏的情况下,它必须将hashcode与n个bucket进行比较。请更正此错误,并提前感谢 查找bucket是固定时间-它只取决于给定对象的哈希值,而不取决于现有

我有两张单子。我想在两者中找出最小的公共数。我考虑过使用HashSet,因为它不允许重复。在添加两个列表元素时,我可以找到常见的数字。而HashSet插入只需要
恒定时间
。这可以给我
O(n)
找到两个最小的公共点。但是HashSet如何在
常量时间中插入
n
元素呢?在这种情况下,添加最后一个元素需要
O(n)
时间,因为要找到正确的bucket,在最坏的情况下,它必须将hashcode与n个bucket进行比较。请更正此错误,并提前感谢

查找bucket是固定时间-它只取决于给定对象的哈希值,而不取决于现有对象。

查找bucket是固定时间-它只取决于给定对象的哈希值,而不取决于现有对象。

您可以在任何算法书中找到答案(例如Corman,Knuth)。
简而言之:bucketIndex=toPositiveInteger(hashcode())%buckets.length

你可以在任何算法书中找到答案(例如Corman,Knuth)。
简而言之:bucketIndex=toPositiveInteger(hashcode())%buckets.length

该算法看起来非常简单:

  • 构造一个包含列表
    a
    元素的
    HashSet
  • min
    初始化为类似于
    Integer.MAX\u值的较大值
  • 对于
    B
    中的每个元素,测试它是否在
    哈希集中。如果是,并且小于
    min
    ,则更新
    min

  • 在任何情况下,哈希算法或多或少都会假设哈希实际上是一个好的哈希函数,并且您不必担心O(n)最坏的情况。

    该算法似乎非常简单:

  • 构造一个包含列表
    a
    元素的
    HashSet
  • min
    初始化为类似于
    Integer.MAX\u值的较大值
  • 对于
    B
    中的每个元素,测试它是否在
    哈希集中。如果是,并且小于
    min
    ,则更新
    min

  • 在任何情况下,哈希算法或多或少都会假设哈希实际上是一个好的哈希函数,并且您不必担心O(n)最坏的情况。

    谢谢您的帮助。我应该更直截了当地问这个问题。我已经在我的问题中写下了算法。但我想问的是HashSet如何在固定时间内插入元素。谢谢你的帮助。我应该更直截了当地问这个问题。我已经在我的问题中写下了算法。但我想问的是HashSet如何在固定时间内插入元素。非常感谢。我已经朝这个方向搜索过了。我假设bucket id的直接地址转换(hashcode)是这方面的根解决方案。非常感谢。我已经朝这个方向搜索过了。我假设bucket id(hashcode)的直接地址转换是这个问题的根解决方案。