HashMap 中的 Double

2024-01-01

我正在考虑使用 Double 作为 HashMap 的键,但我知道浮点比较是不安全的,这让我开始思考。 Double 类上的 equals 方法也不安全吗?如果是,则意味着 hashCode 方法也可能不正确。这意味着使用 Double 作为 HashMap 的键将导致不可预测的行为。

有人可以在这里证实我的猜测吗?


简短回答:不要这样做

长答案:以下是密钥的计算方式:

实际的密钥将是java.lang.Double对象,因为键必须是对象。这是它的hashCode() method:

public int hashCode() {
  long bits = doubleToLongBits(value);
  return (int)(bits ^ (bits >>> 32));
}

The doubleToLongBits()方法基本上采用 8 个字节并表示它们很长。因此,这意味着 double 计算中的微小变化可能意味着很大,并且您将有关键的失误。

如果您可以满足点后给定数量的点数 - 乘以 10^(点后的位数)并转换为 int (例如 - 对于 2 位数字乘以 100)。

会安全很多。

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

HashMap 中的 Double 的相关文章

随机推荐

  • GWT sinkEvent 功能如何工作?

    我有一个简单的 GWT 设置用于测试
  • 获取变量声明的位置

    我正在开发一个扩展 它需要我获取变量声明的位置 例如 var x 5 console log x VS Code API 是否提供类似功能getVariableLocations 这将返回的位置var x 5 您可以获得文件符号 https
  • 在 RSpec 中调用相同的 rake 任务两次

    我正在尝试使用 rspec 测试 rake 任务 为此我需要调用它两次 但是 它只被调用一次 it first test do Rake Task my rake task invoke rake task was processed en
  • 将单击处理程序添加到 GWT 中的 Horizo​​ntalPanel

    如何添加点击处理程序HorizontalPanel 它与使用一起工作addDomHandler 在较新的 GWT 版本中 但我必须降级到不支持此功能的 GWT 2 0 4 我曾经这样做过 horizontalPanel getWidget
  • sqlite3 日期和间隔函数

    我想知道sqlite3是否支持间隔函数 以下语句被 PostgreSQL 接受 但 sqlite3 无法解析它 select from orders where and o orderdate lt date 1995 03 01 inte
  • 需要巧妙的想法:如何为不同的字体声明不同的大小? @字体脸?

    我从未见过这样做 但我有一种感觉 一定有一种聪明的方法可以做到这一点 css font size adjust 看起来从来都不是这样的 但是当我环顾四周时 我发现了一些非常巧妙的 css 技术 Take this http net tuts
  • cocoa touch中有没有好的HTML模板引擎? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 在我的 iPhone 应用程序中 我想使用模板生成的一些 html 来填充 UIWebView 有没有像 jinja 或 smarty 这样的适用于
  • iOS 单元和 ui 测试中忽略了方案语言设置

    我的最终目标是发行 xcodebuild test 从命令行为不同的语言选择不同的方案 目前我有两个方案 它们之间唯一的区别是应用程序语言 在一种方案中是英语 在另一种方案中是西班牙语 如果我使用 Xcode 运行应用程序 它会很好地工作
  • 如何检查DLL依赖关系?

    有时 当我做一个小项目时 我不够小心 不小心添加了我不知道的 DLL 的依赖项 当我将此程序发送给朋友或其他人时 它不起作用 因为 某些 DLL 丢失了 这当然是因为程序可以在我的系统上找到 DLL 但不能在他们的系统上找到 有没有办法扫描
  • 在同步代码中实现需要 Task 返回类型的接口

    当实现一个返回一个接口的方法时Task
  • pandas:如何根据 X 列数是否大于某个数字来选择行?

    我可以用data data data gt 10 any 1 选择任意列大于 10 的行 如果我想选择任意 5 列大于 10 的行怎么办 以下内容应该适合您 data data data gt 10 count axis 1 gt 5 ex
  • 如何在emacs中使用[delete]键删除区域

    I am using Emacs 23 3 on Mac OS X Lion How can I delete the selected text region with simple key typing something like d
  • 如何在Python中获取网络接口卡名称?

    有没有办法获取机器中网卡的名称等 eth0 lo 如果是的话你会怎么做 我已经研究过 但到目前为止我只找到了获取IP地址和MAC地址的代码 例如 import socket socket gethostbyname socket getho
  • Apache Pulsar 函数的状态,如果我们不显式调用 deleteState,它会“永远”保留吗?

    当函数使用 context putState id object 时 保存的对象是否会永远保存在簿记员中 直到调用显式的 deleteState same id 为止 除了调用deleteState之外 是否有某个时间点 任何类型的某种操作
  • onPause 停止 LocationManager

    我想我这样做对吗 我有这段代码 它开始通过此处未显示的 MyLocationListener 方法查找我的 GPS 位置 该方法有效 但我想在暂停时停止 locationManager 我认为或者每当此活动不是当前的 但我无法获取删除更新代
  • 数据库中的数据格式值更改

    forms py DATE INPUT FORMAT d m Y m d Y class ReportForm forms ModelForm manual date forms DateField input formats DATE I
  • Ruby on Rails:对同一模型具有不同名称的两个引用

    我的应用程序有一个名为User 它包括电子邮件地址 用户名 我想创建一个模型Message它应该有两个字段sender and recipient 两者都引用了User模型 我试过这个 rails generate model Messag
  • 开发 Ruby gem 时如何添加“撬”

    我有一个叫做 某物 的宝石 我想在开发 gem 时添加 pry 作为开发依赖项 但我不知道如何加载它 如果我在 lib something rb 中有 需要某些东西 当我释放 gem 时 它会抛出一个 LoadError 因为 pry 只是
  • TAB 自动完成 python CLI

    我只是想知道是否可以编写一个在 shell 中运行的 Python 脚本 当用户点击 Tab 时可以向他们提供建议 例如 某些应用程序如何限制其支持的建议文件类型 我在 optParse 中没有找到任何可以做到这一点的东西 理想情况下是 m
  • HashMap 中的 Double

    我正在考虑使用 Double 作为 HashMap 的键 但我知道浮点比较是不安全的 这让我开始思考 Double 类上的 equals 方法也不安全吗 如果是 则意味着 hashCode 方法也可能不正确 这意味着使用 Double 作为