哈希表中关键内容的最佳实践

2024-02-21

最好的查找结构是HashTable。它提供持续的访问一般(最坏情况下呈线性)。
这取决于哈希函数。好的。
我的问题如下。假设一个良好的实施HashTable e.g. HashMap关于映射中传递的键是否有最佳实践?我的意思是建议键必须是不可变的对象,但我想知道是否还有其他建议。
例如密钥的大小?例如,在一个好的哈希图中(以上述方式)如果我们使用String作为键,“瓶颈”不会出现在字符串比较中吗equals(试图找到钥匙)?那么按键应该保持小吗?或者是否存在不应该用作键的对象?例如。 AURL?在这种情况下,您如何选择使用什么作为密钥?


HashMap 性能最好的键可能是 Integer,其中hashCode() and equals()实施为:

public int hashCode() {
    return value;
}

public boolean equals(Object obj) {
    if (obj instanceof Integer) {
        return value == ((Integer)obj).intValue();
    }
    return false;
}

也就是说,HashMap 的目的是将某些对象(值)映射到其他对象(键)。使用哈希函数来寻址(值)对象的事实是为了提供快速、恒定时间的访问。

建议键必须是不可变的对象,但我想知道是否还有其他建议。

建议将对象映射到您需要的内容:不要认为哪个更快;只考虑哪个更快。但请考虑什么最适合您的业务逻辑来处理要检索的对象。

重要的要求是键对象必须是不可变的,因为如果您在将键对象存储到 Map 后更改它,则以后可能无法检索关联的值。

The key word in HashMap is Map。你的对象应该只是map。如果您牺牲了优化密钥的映射任务,那么您就违背了映射的目的 - 可能无法实现任何性能提升。

我 100% 同意你问题中的前两条评论:

主要的限制是它必须是您想要作为查找基础的东西;)
——奥利·查尔斯沃斯

一般规则是使用您需要查找的任何内容作为键。
——路易斯·沃瑟曼

记住优化的两条规则:

  1. Don't.
  2. (仅适用于专家)还没有。

第三条规则是:优化前的配置文件.

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

哈希表中关键内容的最佳实践 的相关文章

随机推荐

  • 是否可以更改版本号?归档 iOS 项目后?

    我提交给 iTunes Connect 进行 Testflight beta 测试的 iOS 应用程序版本几乎过期了 据我所知 为了延长 30 天的试用期 我需要再次提交它 但要使用递增的构建版本 由于我存档的代码库是很久以前的 我不想将代
  • AcquireTokenForClient (MSAL) 是否使用令牌缓存?

    我 成功 使用客户端凭据流与 MSAL 来验证应用程序 如下所示 private static async Task
  • 使用 parfor 节省时间和内存?

    考虑prova mat在MATLAB中通过以下方式获得 for w 1 100 for p 1 9 A p randn 100 1 end baseA A A eval baseA A num2str w baseA end save sp
  • JQuery:动态高度()与窗口调整大小()

    我遇到了与此海报相同的问题 Jquery height 和 resize 问题 https stackoverflow com questions 4931700 jquery problem with height and resize
  • shell脚本中的top命令

    我正在尝试通过 Expect 脚本获取 top 命令的前 5 行 我从 shell 脚本中调用这个期望脚本以及其他一些东西 top head 5给我以下输出 即没有 cpu 统计信息 顶部 09 10 58 向上 46 天 17 03 12
  • Swift随机数[重复]

    这个问题在这里已经有答案了 我在使用drawRandomCard 函数时遇到问题 它在一段时间内正常工作 但最终会使应用程序崩溃 这是代码 import Foundation var cardDeck Array
  • 如何在 Heroku 上使用 Zerigo DNS 将根级域重定向到 www 子域? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我在将根域重定向到 www 子域时遇到问题 例如 将 blahblahblah com 重定向到 www blahblahblah com
  • 如何防止 dbms_output.put_line 修剪前导空格?

    我正在尝试右对齐某些 PL SQL 代码的输出 但 dbms output put line 正在修剪字符串中的前导空格 我该如何让它停止 或者有没有更好的方法来输出带有前导空格的字符串 dbms output put line lpad
  • Webdriver JS 测试期间无法切换窗口

    在使用 Jasmine JS 通过 Selenium Webdriver 进行测试期间 我无法切换窗口 跑步者 量角器 JS 平台 Node JS 上的 Selenium Webdriver 代码框架 Jasmine JS 代码如下 请注意
  • 在 Apache 服务器上使用 Sudo 权限运行 Python CGI 脚本

    我是在 Apache 2 2 22 http 服务器上使用 Ubuntu 12 04 的 python CGI 新手 我正在编写一个脚本来创建其他 python 脚本 这些创建的脚本必须具有 chmod x 权限才能执行 创建脚本的脚本必须
  • Spring Integration 在没有轮询器的情况下监听队列

    我想使用 Spring Integration 实现 HTTP 端点 它监听 http 请求 将请求数据作为消息发送到通道 另一个端点应该监听该通道上的消息并处理它们 听起来很简单 但我想要实现的是 消息应该按顺序处理 应尽快处理消息 如果
  • android 中 ?attr/colorControlHighlight 的默认颜色是什么?

    我需要知道 android 中 attr colorControlHighlight 的默认颜色 因为我需要为预棒棒糖设备的可绘制对象中的按钮按下状态背景应用相同的颜色 attr colorControlHighlight 是 lollip
  • 更改 UIImagePicker 的纵横比

    所以我尝试在我的 iOS 应用程序中制作一个自定义相机 我想让相机像快照一样全屏显示 但我找不到任何地方可以帮助我将宽高比从 4 3 默认 更改为 16 9 iPhone 5 和 5s 4 英寸屏幕 有人能指出我正确的方向吗 这里有点无耻的
  • 如何获取夏令时的开始和结束日期?

    我正在尝试获取 Android 中夏令时的转换日期 这是特定时区夏令时开始和结束的日期 我怎么做 无法直接执行此操作 但您可以使用 TimeZone isDaylightTime Date 如下所示 TimeZone tz TimeZone
  • AOL 的开发者 API 密钥问题

    我正在使用 AOL 登录创建一个新应用程序 为此 我需要开发人员 api 密钥 我获取了 Facebook twitter 的 api 密钥 但对于 aol com 当我打开 dev aol com 时 它总是重定向到 www aol co
  • 通过 ajax 刷新数据时覆盖表单“重置”行为

    我依靠表单的 重置 行为来取消编辑 我面临的问题是 一旦发布数据通过ajax更新 重置仍然会恢复到最初随页面加载的数据 所以基本上我需要做的是 重置 重置 功能 合理 尝试这个 yourForm bind reset function re
  • 如何比较两个具有非连续顺序的随机数的文件?

    有 2 个名为 compare 1 txt 和 compare2 txt 的文件 其中包含非连续顺序的随机数 猫比较1 txt 57 11 13 3 889 014 91 猫比较2 txt 003 889 13 14 57 12 90 Ai
  • 如何在不使用边框的情况下更改 a 标签的下划线粗细?

    我经常对按钮使用 a 标签 因此它们有一个填充 使它们像按钮一样 如何更改文本装饰下划线的粗细 人们经常建议为此使用边框底部 但是 底部边框不是下划线 有些字母甚至延伸到下划线以下 下划线比某物下面的线复杂得多 正如所解释的 我已经使用了相
  • 如何将 .NET 库移动到子目录?

    我想将我的应用程序使用的所有库 dll 放入一个子目录 假设名为 lib 如何指示程序集加载器在该特定目录 这是主程序集所在的目录的子目录 中查找引用的程序集 我认为应该通过 app config 中的一些设置来完成 对吗 探测路径 htt
  • 哈希表中关键内容的最佳实践

    最好的查找结构是HashTable 它提供持续的访问一般 最坏情况下呈线性 这取决于哈希函数 好的 我的问题如下 假设一个良好的实施HashTable e g HashMap关于映射中传递的键是否有最佳实践 我的意思是建议键必须是不可变的对