hashmap包含键的复杂度

2024-05-16

我写了一个方法来查找列表中的重复项。它工作正常,但我担心使用 containsKey 的复杂性。当我们使用 containsKey 时,我们必须为每个键计算一个哈希函数,然后将每个键与我们的搜索项进行比较,对吗?那么复杂度不是 O(n) 吗?

这是函数:

public void findDup(List<String> list){

    HashMap<String,Integer> map = new HashMap<>();
    int pos=0;
    for(String s: list){
        if(map.containsKey(s)){
            Log.v("myapp","duplicate found:"+s);
        }
        else
            map.put(s,pos);
        pos++;
    }
}

为了称呼它,我这样做:

List<String>list=new ArrayList<>();

    for(int i=0;i<12;i++)
        list.add(i+"");

    //these numbers should surely be duplicates
    list.add("3");list.add("6");

    findDup(list);

//输出显然是3和6。

更新:我重写了该函数,只使用一组更有意义的:

public void findDup(List<Integer> list){

        HashSet<Integer> set = new HashSet<>();
        for(Integer num: list){
            if(!set.add(num)){
                Log.v("myapp","duplicate found:"+num);
            }

        }
    }

它在 Javadoc 中指定为O(1).

复杂度你的算法因此O(N).

但即使如此without the containsKey()调用,这实际上是没有必要的。您所要做的就是测试是否put()返回一个非空值,表示重复。

当我们使用 containsKey 时,我们必须为每个键计算一个哈希函数,然后将每个键与我们的搜索项进行比较,对吗?

错误的。我们计算搜索键的哈希值并检查该存储桶是否被相等的键占用。

那么复杂度不是 O(n) 吗?

No.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

hashmap包含键的复杂度 的相关文章

随机推荐

  • 为每个因素级别添加日期时间序列

    我有一个带有因子列的数据框 s lt data frame id 901 910 s id lt as factor s id 我有一个日期时间序列 library lubridate start lt now as difftime 2
  • 如何使用gunicorn和bokeh服务配置Nginx

    我想提供一个 Flask 应用程序 该应用程序使用本地网络服务器上的嵌入式散景服务 为了说明这一点 我使用了一个例子散景服务示例 https github com bokeh bokeh blob 0 12 11 examples howt
  • 由于重复捕获组而不是捕获重复组,正则表达式不匹配

    我有以下正则表达式 A G A G 具有以下表达式 A BsCb 我期望 3 个匹配结果 A Bs Cb 但测试在https regex101 com https regex101 com 只给我最后一场比赛Cb 并告诉我重复捕获组只会捕获
  • 如何从@google-cloud/storage读取文件?

    我正在从我的存储桶中检索文件 我收到该文件并想要阅读其内容 但我不想将其下载到我的本地项目 我只想读取内容 获取数据并用它进行其他操作 我的代码 export const fileManager async gt try const sou
  • 3D 网格之间的豪斯多夫距离

    我有多个网格 numpy 数组 Nk Ny Nx 并且想使用 Hausdorff 距离作为这些网格相似性的度量 scipy 中有几个模块 scipy spatial distance cdist scipy spatial distance
  • jsf 2.0 中看不见的注释? [复制]

    这个问题在这里已经有答案了 是否可以在我的 xhtml 文件中嵌入注释 这些注释仅显示在源代码中 而不显示在渲染结果中 我想在文件中包含作者 日期 但最终用户在生成的输出中不应该看到它们 如果我使用标准评论标签浏览器显示它们 将以下内容添加
  • StringComparison.InvariantCultureIgnoreCase 去哪儿了?

    我正在将 C 代码移植到 Windows 应用商店应用程序 令我惊讶的是 以下代码不再起作用 someString Equals someOtherString StringComparison InvariantCultureIgnore
  • 如何使用 hibernate 标准查询将两个属性连接成一个属性

    例如 有 2 个房产的门牌号和密码 我想要一个房产作为地址 例如门牌号是 10 pincode 是 110064 组合地址属性是 10 110064 这是我的代码 final Criteria criteria getDatabaseSes
  • Nginx merge_slashes 重定向

    我在我的 Java 应用程序中使用 nginx 我的问题是 nginx 正在合并斜杠 我无法将我的网站重定向到正确的版本 例如 http goout cz cs koncerty praha 被合并到 http goout cz cs ko
  • 将 FragmentContainerView 与导航组件一起使用?

    更新为导航后2 2 0 beta01 https developer android com jetpack androidx releases navigation 2 2 0 beta01从以前的版本开始 lint 会发出有关替换的警告
  • 如何在 SQL Server 中保持数据行内

    我正在尝试找出如何检测数据是否在VARCHAR n SQL Server 2008 中的列存储在行内或行外 有谁知道如何做到这一点 另外 如果我们需要数据 有没有办法将数据保持在行中 要查看某个值是行内还是行外 您可以使用DBCC PAGE
  • Word通过vba宏删除tabe列出现错误

    我想将excel中的数据复制到word表中 然后从表中删除一些列 我可以将数据复制到表中 但是当我删除列时会出现错误 无法访问此集合中的各个列 因为该表具有混合的单元格宽度 我的代码 Public Tbl1 As Table Sub cal
  • 为什么 EF Core 一对多关系集合返回 null?

    这可能看起来像一个重复的问题EF Core 一对多关系列表返回 null https stackoverflow com questions 55210832 ef core one to many relationship list re
  • Pytest 固定装置的范围“类”在每个方法上运行

    我正在尝试使用 Pytest 创建一个测试环境 这个想法是将测试方法分组到类中 对于每个班级 小组 我想附上config将要参数化的夹具 这样我就可以使用 配置 A 运行所有测试 然后使用 配置 B 运行所有测试 依此类推 但同时 我也想要
  • Python 中使用 geoJSON 绘制多边形中的点

    我有一个包含大量多边形 特别是人口普查区 的 geoJSON 数据库 并且有很多长的纬度点 我希望存在一个有效的 Python 代码来识别给定坐标位于哪个人口普查区 但是到目前为止我的谷歌搜索还没有透露任何信息 Thanks 我发现了一个有
  • 将 < 或 > 运算符作为参数传递给函数?

    我的函数里面有一个if 像这样的声明 if passedValue lt staticValue 但我需要能够传递一个参数来指示 if 表达式是像上面那样还是 if passedValue gt staticValue 但我真的无法通过 l
  • Postgresql 的 SQL_NO_CACHE?

    MySQL 关键字是否有等效的 postgresqlSQL NO CACHE 或 SQL Serverdbcc drop clean buffers 即您可以简单地将其包含在 SQL 语句中或作为脚本的一部分吗 UPDATE 这个问题 查看
  • Keycloak 无法使用服务帐户令牌获取具有权限的 RPT

    我正在使用Keycloak 4 8 3 Final 我在 Keycloak 中有以下客户 用户服务 库存服务 库存服务在 Keycloak 中定义了一些资源并启用了授权 用户服务 作为服务帐户 在中分配了必要的客户端角色服务帐户角色 tab
  • 使用正确的头打印文件名

    我想获取当前目录中的文件名 使得文件的第一行等于myWord 我想结合find type f命令与 exec选项与head 1 filename但无济于事 有没有一些聪明的 单行的解决方案来解决这个问题 您可以使用find with awk
  • hashmap包含键的复杂度

    我写了一个方法来查找列表中的重复项 它工作正常 但我担心使用 containsKey 的复杂性 当我们使用 containsKey 时 我们必须为每个键计算一个哈希函数 然后将每个键与我们的搜索项进行比较 对吗 那么复杂度不是 O n 吗