哈希表。怎么运行的?

2024-03-07

现在,我试图了解如何构建Hashtable.

最有趣的是——当对象被添加到Hashtable?

我在一本书上读到:

第一步: 已计算hashCode() object.

接下来,我们确定该对象在Hashtable: obj.hashCode() % Hashtable.length.

例如,向其中添加更多元素Hashtable:

Hashtable<String, String> hm=new Hashtable<String, String>(100);

        hm.put("Lee","Lee");
        hm.put("lee","lee");
        hm.put("eel","eel");

定义一个用于放置对象的存储桶:

    System.out.println("Lee".hashCode() % 100);
    System.out.println("lee".hashCode() % 100);
    System.out.println("eel".hashCode() % 100);

如果我理解该算法,则对象必须按如下方式放置在表中:

eel /*because,"eel".hashCode() % 100=0*/, 
lee /*because, "lee".hashCode() % 100=20*/, 
Lee /*because, "Lee".hashCode() % 100=68*/

但我们看到的结果是什么?

System.out.println(hm);

{Lee=Lee, lee=lee, eel=eel} 

请告诉我,我哪里做错了?


迭代顺序为Hashtable(也HashMap)元素不受保证(依赖于实现),因此恕我直言,尝试在此基础上建立理论没有太多意义。它甚至可能在不同的 Java 版本之间发生变化(它确实从 Java5 更改为 Java6)。

Btw Hashtable已过时,建议使用(并分析)HashMap反而。

作为基本的哈希映射实现,您的描述对我来说听起来不错。但实际执行过程中HashMap至少从 Java4 开始,它比这要复杂得多。例如。哈希表的大小始终是 2 的幂(对于像您描述的那样的基本哈希表来说,这将是一个非常糟糕的决定),并且从关键对象获得的哈希值在内部进行重新哈希,以在实际大小上实现更均匀的分布表的。有关这方面的更多详细信息,请参阅以下几期 Java Specialist Newsletter:

  • HashMap需要更好的hashCode() http://www.javaspecialists.eu/archive/Issue054.html
  • JDK 1.4 HashMap的后续hashCode()之谜 http://www.javaspecialists.eu/archive/Issue054b.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

哈希表。怎么运行的? 的相关文章

  • “JSONArray 文本必须在 null 的第 1 个字符处以 '[' 开头”

    只是想知道这个错误可能意味着什么 我从下面的代码中得到它 try JSONArray jArray new JSONArray result for int i 0 i
  • 无论线程如何,对象是否总是能看到其最新的内部状态?

    假设我有一个带有简单整数计数变量的可运行对象 每次可运行对象运行时该变量都会递增 该对象的一个 实例被提交以在计划的执行程序服务中定期运行 class Counter implements Runnable private int coun
  • 是否可以使用 Java 读写 Parquet,而不依赖 Hadoop 和 HDFS?

    我一直在寻找这个问题的解决方案 在我看来 如果不引入对 HDFS 和 Hadoop 的依赖 就无法在 Java 程序中嵌入读写 Parquet 格式 它是否正确 我想在 Hadoop 集群之外的客户端计算机上进行读写 我开始对 Apache
  • 垂直 ViewPager 中的动画

    我需要垂直制作这个动画ViewPager https www youtube com watch v wuE 4jjnp3g https www youtube com watch v wuE 4jjnp3g 这是我到目前为止所尝试的 vi
  • 如何从 Java 访问 Windows 设备管理器中的信息?

    我有一个串行 USB 设备 并且其中多个设备可以连接到计算机 我需要查询和检索设备连接到的 COM 端口列表 在 Windows 设备管理器中 您可以获得当前连接的设备的 COM 端口 友好名称 该列表是动态的 从注册表中读取不工作 htt
  • 使用全局变量从内部函数获取空字符串

    请帮助我解决一些小问题 我确信你能做到 D 我试图在 firestore 文档 user cases information 上设置一个字段 其中包含一个字段 case number 首先我声明这个全局变量 private String c
  • Spring HATEOAS 和 HAL:更改 _embedded 中的数组名称

    我正在尝试使用 Spring HATEOAS 构建符合 HAL 的 REST API 经过一番摆弄后我终于开始工作了mostly正如预期的那样 示例 输出现在看起来像这样 links self href http localhost 808
  • 绘制平滑曲线

    我想创建更平滑的曲线 而不仅仅是线角 这是我现在画的图 这是我的代码 case FREEHAND float pts float ptk ptk new float 2 imageMatrix invert inv if mCurrentS
  • 如何自动转换十六进制代码以将其用作 Java 中的 byte[]?

    我这里有很多十六进制代码 我想将它们放入 Java 中 而不需要向每个实体附加 0x 喜欢 0102FFAB 和我必须执行以下操作 byte test 0x01 0x02 0xFF 0xAB 我有很多很长的十六进制代码 有什么办法可以自动做
  • for循环中更新JLabel的问题

    我的程序的想法是从之前在其他 JFrame 中保存的列表中选择一个名称 我想在标签中一个接一个地打印所有名称 它们之间有很小的延迟 然后停在其中一个名称上 问题是lbl setText String 如果有多个则不起作用setText co
  • 膨胀类 android.support.design.widget.NavigationView 时出错

    我按照 NavigationView 的教程进行操作 但无法解决此错误消息 Error inflating class android support design widget NavigationView 教程链接 https www
  • RxJava android mvp 单元测试 NullPointerException

    我是 mvp 单元测试的新手 我想对演示者进行一个非常基本的测试 它负责登录 我只想断言 view onLoginSuccess 这是演示者代码 public LoginPresenter LoginViewContract loginVi
  • 了解Kafka流groupBy和window

    我无法理解 kafka 流中的 groupBy groupById 和窗口的概念 我的目标是聚合一段时间内 例如 5 秒 的流数据 我的流数据看起来像 value 0 time 1533875665509 value 10 time 153
  • Java HashSet 是线程安全的只读吗?

    如果我通过 Collections unmodifyingSet 运行 HashSet 实例后 它是线程安全的吗 我问这个是因为 Set 文档声明它不是 但我只是执行读取操作 来自 Javadoc 请注意 此实现不是同步的 如果多个线程同时
  • 获取 Future 对象的进度的能力

    参考 java util concurrent 包和 Future 接口 我注意到 除非我弄错了 只有 SwingWorker 实现类才能启动冗长的任务并能够查询进度 这就引出了以下问题 有没有办法在非 GUI 非 Swing 应用程序 映
  • Spring - 如何在不匹配列名的情况下使用 BeanPropertyRowMapper

    我正在开发一个应用程序 该应用程序已使用行映射器从纯 JDBC 转换为 Spring 模板 我遇到的问题是数据库中的列与属性名称不匹配 这阻止我使用BeanPropertyRowMapper容易地 我看到一些关于在查询中使用别名的帖子 这会
  • 为什么不能在 if 语句中声明变量?

    以下 Java 代码无法编译 int a 0 if a 1 int b 0 if a 1 b 1 为什么 不能有任何代码路径导致程序将 1 分配给b无需先声明 我突然想到b的变量范围可能仅限于第一个if声明 但后来我不明白为什么 如果我实在
  • 在java中执行匿名pl/sql块并获取结果集

    我想执行匿名 PL SQL 并需要获取结果集对象 我得到了可以通过在 PL SQL 块内使用游标来完成的代码 但 PL SQL 块本身将以文本形式来自数据库 所以我无法编辑该 PL SQL 块 并且它只会返回两个值 其列名始终相同 它将返回
  • java Web应用程序中的日期转换

    String date1 13 03 2014 16 56 46 AEDT SimpleDateFormat sdf new SimpleDateFormat dd MM yyyy HH mm ss z sdf setTimeZone Ti
  • 如何使用socket.io发送图像文件(二进制数据)?

    我无法从以下位置发送数据Android Client to NodeJS Server I use Socket IO 客户端 https github com socketio socket io client java我的客户端中的ja

随机推荐

  • VBA:如何将不同工作表上的两个范围合并为一个,以循环遍历

    尝试将两个宽度相等但长度不同的范围 每个范围位于不同的纸张上 读取到另一个范围中 我需要按特定顺序循环组合数据 Set wRIL Worksheets INS Set rRIL wRIL Range L2 Set rRIL rRIL Cur
  • 谷歌地图缩小限制[重复]

    这个问题在这里已经有答案了 How do I set zoom out limit on the map it currently lets me zoom out too far to the point that I see multi
  • 安装具有 CRAN 镜像依赖项的本地 R 包

    我已经构建了一个 R 包 即我有 mypackage tar gz 文件 该软件包依赖于其他几个软件包 所有这些软件包都可以从任何 CRAN 镜像下载和安装 现在我想在尚未安装依赖项的系统上安装此软件包 并且我希望在安装软件包时自动下载并安
  • 项目错误:QT 中的未知模块:webkitwidgets [重复]

    这个问题在这里已经有答案了 我正在尝试使用 MXE 在来自本教程 https stackoverflow com questions 14170590 building qt 5 on linux for windows 14170591
  • 使用 dplyr 和 rle 对条件组中的连续值进行计数

    我的问题与下面提出的问题非常相似 但是我想添加一个附加命令以仅返回序列具有超过 2 个连续值的情况 当给定的序列运行在给定的时代和给定的年份内有超过 2 个连续的数字时 如何计算连续 成功 的数量 即 consec 中的 1 个 类似的问题
  • SQL Server 和 MySQL 同步

    我正在与一个在 SQL Server 和 MySQL 之间同步的客户合作 其中包含完全相同的架构和数据 我们希望将这些数据集中到一个数据库中 除了性能和可维护性问题之外 最初的设计还有什么不好的地方呢 您可以使用 MySQL 实例在 SQL
  • Pandas read_csv,读取缺失值指定为 int 的布尔值

    我正在尝试将 csv 导入到 pandas 数据框中 我有用 1 和 0 表示的布尔变量 其中缺失值用 9 标识 当我尝试将 dtype 指定为布尔值时 我会收到许多不同的错误 具体取决于我尝试的内容 示例数据 test csv var1
  • 在 PowerBI 报告中排除周末?

    我在 Power BI 中有一个 VS Team Services 项目的燃尽图 这样我们就可以报告故事点 而不是剩余的工作量 在图表中 X 轴上有日期 有没有办法从图表中过滤掉周末日期 周末没有活动 I found 这个论坛帖子 http
  • 使用 Angular JS 删除 Facebook OAuth 哈希值

    Facebook 喜欢添加 到我们提供的 OAuth 回调 URL 的末尾 虽然我们没有使用基于哈希的导航 但它看起来很烦人 我想摆脱它 location hash 导致无限循环 watch 这也会发生在 window location h
  • 如何在 JSON 响应反应本机上生成动态 UI

    这里我试图生成动态 UI 通过 API 我得到了一些 JSON 格式的响应 我必须在 UI 上绘制它 就像我没有定义任何 TextInput 一样 它应该动态生成 下面是一些示例 JSON 响应 这可能会根据不同的请求而改变 请帮助 我被困
  • 使用 JavaScript 获取 IE9 中的数据列表选项

    这段代码适用于除 Internet Explorer 9 之外的所有主要浏览器 我不明白我做错了什么 这可能是我错过的一些简单的事情 复制此代码 或使用这个jsFiddle http jsfiddle net Jordan PU9BF 在I
  • 长路径 \\?\ 解决方法在某些安装上不起作用

    我正在开发的应用程序需要处理具有很长文件 路径名的文件 这是一个 Net 4 6 应用程序 因此我实现了 4 6 2 之前的解决方法 以允许使用 语法 如概述的here https stackoverflow com questions 4
  • Neo4j Cypher 查询:顺序集合,取前 n 个元素

    我在为这种社交网络类型的应用程序编写 Cypher 查询时遇到问题 它涉及用户添加帖子 本质上是带有描述的图像 用户可以查看这些帖子 在 Cypher 中 图模型是这样的 user WROTE REVIEW gt review EVALUA
  • 如果在循环中抛出异常,则使用 try-with-resources 出现奇怪的“资源泄漏:流永远不会关闭”

    为什么 Eclipse 给出一个奇怪的 资源泄漏 zin 永远不会关闭 即使我使用以下代码 也会发出警告try with resources Path file Paths get file zip Resource leak warnin
  • 根据指定格式将字符串转换为日期时间

    我希望按照指定的格式得到日期格式的最终 结果 即YYMMDD我怎样才能从下面给出的字符串中得到这个 string s 110326 从字符串到日期 DateTime d DateTime ParseExact s yyMMdd Cultur
  • 在 C++ (Qt) 中实现内省

    我想知道是否有人可以为我澄清以下内容 我即将参加与 Qt 相关的测试 示例问题相当模糊 其中一个问题如下 Qt 在 C 中通过以下方式实现自省 A 自动将每个类定义为 QObject b 定义可以在 QObject 类中调用自身的元对象 C
  • Android 相机拍摄的照片尺寸非常小

    我正在尝试从相机捕获图像 压缩它 然后将其存储到 SD 卡 如果我使用下面的代码直接将其保存到 SD 卡 我会得到完整的图像 但如果我尝试在系统中加载图像 我会得到一个超小的图像尺寸 例如 320 x 240 而不是完整的 5 mp 图像
  • 动态创建新的 PropertyInfo 对象

    这是我的第一篇文章 尽管我在某种程度上搜索了与我的问题相关的主题 但我在找到正确的答案时遇到了很多麻烦 我的问题可能很简单 但我知道答案可能并不那么容易给出 如果有的话 话虽这么说 这就是我的情况 作为示例 我有一个 PropertyInf
  • 通过命令行构建和发布 C# .NET Web 应用程序

    我需要能够通用且单独地构建和发布 C ASP NET Web 应用程序 理想情况下 我想使用 MSBuild 来构建应用程序 如果成功 我想简单地发布该网站 最好仅包含文件副本 目前 我可以使用 MSBuild 轻松构建 Web 应用程序
  • 哈希表。怎么运行的?

    现在 我试图了解如何构建Hashtable 最有趣的是 当对象被添加到Hashtable 我在一本书上读到 第一步 已计算hashCode object 接下来 我们确定该对象在Hashtable obj hashCode Hashtabl