Java HashMap 与 Int 数组

2024-01-01

我正在使用此代码来检查数组是否存在于HashMap:

public class Test {
    public static void main(String[] arg) {
        HashMap<int[], String> map = new HashMap<int[], String>();
        map.put(new int[]{1, 2}, "sun");
        System.out.println(map.containsKey((new int[]{1, 2})));
    }
}

但这打印False。我如何检查数组是否存在于HashMap?


问题是因为两个int[]不相等。

System.out.println(
    (new int[] { 1, 2 }).equals(new int[] { 1, 2 })
); // prints "false"

Map和其他 Java Collections Framework 类根据以下方式定义其接口equals. From Map API http://java.sun.com/javase/6/docs/api/java/util/Map.html:

Collections Framework 接口中的许多方法都是根据equals方法。例如,规范为containsKey(Object key)方法说:“返回true当且仅当此映射包含键的映射k这样(key==null ? k==null : key.equals(k))."

请注意,它们不必是同一个对象;它们可以是同一个对象。他们必须是equals。 Java 中的数组扩展自Object,其默认实现equals仅在对象身份时返回 true;因此为什么它打印false在上面的片段中。


您可以通过多种方式之一解决您的问题:

  • Define your own wrapper class for arrays whose equals uses java.util.Arrays http://java.sun.com/javase/6/docs/api/java/util/Arrays.html equals/deepEquals method.
    • 并且不要忘记当你@Override equals(Object),你还必须@Override hashCode
  • 使用类似的东西List<Integer> that does define equals就它们所包含的值而言
  • 或者,如果你can使用参考相等equals, you can坚持你所拥有的。正如您不应该期望上面的代码片段会被打印一样true,您不应该期望能够仅通过数组的值找到数组;每次都必须坚持并使用原始参考资料。

也可以看看:

  • 在 Java 中重写 equals 和 hashCode https://stackoverflow.com/questions/27581/overriding-equals-and-hashcode-in-java
  • 如何保证hashCode()和equals()一致? https://stackoverflow.com/questions/410236/how-to-ensure-hashcode-is-consistent-with-equals
  • 了解 HashMap 中 equals 和 hashCode 的工作原理 https://stackoverflow.com/questions/1894377/understanding-the-workings-of-equals-and-hashcode-in-a-hashmap

API

  • Object.equals http://java.sun.com/javase/6/docs/api/java/lang/Object.html#equals%28java.lang.Object%29 and Object.hashCode http://java.sun.com/javase/6/docs/api/java/lang/Object.html#hashCode%28%29
    • 对于 Java 程序员来说,了解这些契约以及如何使它们与系统的其余部分一起工作非常重要
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java HashMap 与 Int 数组 的相关文章

  • 重写 getPreferredSize() 会破坏 LSP

    我总是在这个压倒一切的网站上看到建议getPreferredSize 而不是使用setPreferredSize 例如 如前面的线程所示 对于固定大小的组件 使用重写 getPreferredSize 而不是使用 setPreferredS
  • Java 卡布局。多张卡中的一个组件

    一个组件 例如JLabel 在多张卡中使用CardLayout 目前看来该组件仅出现在它添加到的最后一张卡上 如果有办法做到这一点 我应该吗 这是不好的做法吗 或者有其他选择吗 你是对的 它只出现在 添加到的最后一张卡 中 但这与CardL
  • 使用 Spring 控制器处理错误 404

    I use ExceptionHandler处理我的网络应用程序抛出的异常 在我的例子中我的应用程序返回JSON回应HTTP status用于对客户端的错误响应 但是 我正在尝试弄清楚如何处理error 404返回与处理的类似的 JSON
  • 这个等待通知线程语义的真正目的是什么?

    我刚刚遇到一些代码 它使用等待通知构造通过其其他成员方法与类中定义的线程进行通信 有趣的是 获取锁后 同步范围内的所有线程都会在同一锁上进行定时等待 请参见下面的代码片段 随后 在非同步作用域中 线程执行其关键函数 即 做一些有用的事情1
  • 如何在 HandlerInterceptorAdapter 中添加 HttpServletRequest 标头?

    我正在尝试将授权标头添加到我的请求中 作为我们切换环境时的临时解决方法 我试图在扩展 HandlerInterceptorAdapter 的拦截器中处理它 我使用 MutableHttpServletRequest 类制作here http
  • 无法在 Java 中输出正确的哈希值。怎么了?

    在我的 Android 应用程序中 我有一个 SHA256 哈希值 我必须使用 RIPEMD160 消息摘要算法进一步对其进行哈希值 我可以输出任何字符串的正确 sha256 和ripemd160 哈希值 但是当我尝试使用ripemd160
  • 在grails控制器中识别ajax请求或浏览器请求

    我正在开发一个使用大量ajax的grails应用程序 如果请求是ajax调用 那么它应该给出响应 这部分正在工作 但是如果我在浏览器中输入URL 它应该带我到主页 索引页面而不是请求的页面 下面是ajax调用的示例gsp代码
  • Struts 1 到 Spring 迁移 - 策略

    我有一个legacy银行应用程序编码为Struts 1 JSP现在的要求是迁移后端 目前为 MVC to Springboot MVC 后续UI JSP 将迁移到angular Caveats 1 后端不是无状态的 2 会话对象中存储了大量
  • 在 Java 中创建 XML 文件的最佳方法是什么?

    我们目前使用 dom4j 来创建 XML 文件 不过 我猜现在有更好的东西了 如果我们使用的是 Java 1 6 或更高版本 那么在编写 XML 文件时最好使用什么类 运行速度最快 使用简单 我不需要构建一个 DOM 然后编写整个 DOM
  • 嵌套字段的 Comparator.comparing(...)

    假设我有一个这样的域模型 class Lecture Course course getters class Course Teacher teacher int studentSize getters class Teacher int
  • C 与 C++ 中的 JNI 调用不同?

    所以我有以下使用 Java 本机接口的 C 代码 但是我想将其转换为 C 但不知道如何转换 include
  • 使用单独的线程在java中读取和写入文件

    我创建了两个线程并修改了 run 函数 以便一个线程读取一行 另一个线程将同一行写入新文件 这种情况会发生直到整个文件被复制为止 我遇到的问题是 即使我使用变量来控制线程一一执行 但线程的执行仍然不均匀 即一个线程执行多次 然后控制权转移
  • HTTP 状态 405 - 此 URL java servlet 不支持 HTTP 方法 POST [重复]

    这个问题在这里已经有答案了 我无法使页面正常工作 我有要发布的表单方法和我的 servlet 实现doPost 然而 它不断地向我表明我并不支持POST方法 我只是想做一个简单的网站并将值插入到我的 MySQL 数据库中 type Stat
  • Android:ANT 构建失败,并显示 google-play-services-lib:“解析为没有项目的 project.properties 文件的路径”

    我正在尝试使用 ANT 构建我的应用程序 但在包含 google play services lib 库项目后 我惨遭失败 Step 1 我在 project properties 文件中设置了对库项目的引用 android library
  • java中使用多线程调用同一类的不同方法

    我有一个类 如下所示 具有三种方法 public class MyRunnable implements Runnable Override public void run what code need to write here to c
  • 高效创建抗锯齿圆形蒙版

    我正在尝试创建抗锯齿 加权而不是布尔 圆形掩模 以制作用于卷积的圆形内核 radius 3 no of pixels to be 1 on either side of the center pixel shall be decimal a
  • java.lang.IllegalStateException - 提交响应后无法创建会话

    我在我的项目中使用 JSF PrimeFaces 我为此准备了一个Maven项目 当我编译项目并加载主页后 我收到以下异常 java lang IllegalStateException Cannot create a session af
  • Axis2 错误:要输出的文本中的空白字符 (0x4) 无效

    我创建了一个 Java 客户端 使用 Axis2 1 7 6 作为代码生成器与 SOAP Web 服务进行交互 问题在于客户端的某些输入抛出异常并显示以下消息 org apache axis2 AxisFault Invalid white
  • 如何使用自定义 JDK 构建 Jenkins 项目?

    我有一个常规的 Jenkins 实例 运行一些多分支管道 该实例在 JDK 11 上运行 因为 Jenkins 并不真正支持更高版本 没关系 但不好的是 我的所有管道似乎也都受到 Java 11 的限制 Jenkins 仅使用它自己也使用的
  • java中void的作用是什么?

    返回类型 方法返回值的数据类型 如果方法不返回值 则返回 void http download oracle com javase tutorial java javaOO methods html http download oracle

随机推荐

  • AngularFire httpsCallable Object(...) 不是一个函数

    我想在我的 Ionic 3 应用程序中调用 httpsCallable 函数 我正在尝试遵循这些文档 https firebase google com docs functions callable https firebase goog
  • 在 Java 中实现双缓冲

    我有一个简单的 Java JFrame 画布 我每半秒左右更新一次屏幕上的内容 并且有闪烁 我想实现双缓冲来消除闪烁 但我对 Java 相当陌生 不熟悉如何做到这一点 我找到了一些例子 但不确定如何将他们的方法应用到我的方法中 以下是我现在
  • 删除 MS Excel 中特定字符左侧的所有文本

    这是一个与excel相关的问题 我想删除字符串中特定字符或多个字符左侧的所有文本 所有字符 例如 假设我的单元格中有一个字符串大家好 欢迎来到 stackoverflow 现在我想删除 堆栈 左侧的所有字符 意味着结果应该是堆栈溢出 仅限堆
  • WindowsBase.dll 中发生了“System.ComponentModel.Win32Exception”类型的第一次机会异常

    我有一个 NET 4 0 WPF 项目 当我打开文件对话框时 选择一些文件并按 确定 按钮 然后我在输出窗口中看到以下错误 WindowsBase dll 中发生了 System ComponentModel Win32Exception
  • Plotly r,按变量划分的线型

    我正在尝试制作一个散点图 其中线条样式由因子变量指定 就像颜色一样 但我无法让它工作 library plotly df lt data frame x rnorm 20 y rnorm 20 col c rep 1 10 rep 2 10
  • 将补充 Unicode 字符映射到 BMP(如果可能)

    我遇到了这样的问题 我的 XML 解析器 VTD XML 似乎无法处理 Unicode 补充字符 如果我在这里已经错了 请更正 看起来 解析器只使用这些字符的低 16 位 我无法切换到我正在处理的项目中的另一个解析器 我正在解析 Medli
  • 图书馆的异常处理策略

    构建 NET 库时 您的异常处理策略是什么 具体来说 您关于处理库调用内的异常并将其暴露给调用代码的政策是什么 例如 您是否会像对待其他函数一样对待库函数 从而让它无法处理的所有异常按原样流出 您会为该库创建自定义异常吗 您会捕获所有异常并
  • Fixtures、Selenium 和 Rails(天哪?)

    Rails 应用程序上的 Selenium 测试使用哪些数据 你从固定装置加载吗 使用现有的开发数据库 使用单独的 非固定装置 数据库 我正在考虑我的选择 我有一个 Rails 应用程序 其中包含一个大型 Selenium 测试套件 该套件
  • 使用 jqueryhammer.js 2 和事件委托长按(按住)

    我最近升级到hammer js 2 我注意到的第一件事就是 按住 已被 按下 取代 我的旧代码在事件委托方面工作得很好 但切换到按下似乎只有当我将其放在特定元素上时才有效 注意 我通过jquery插件使用hammer js 锤子 js 1
  • 将组件存储在状态中是个好主意吗?

    将整个 React 组件存储在组件状态或 redux 状态中是一个好习惯吗 是的 它是可选的 因为我们可以在状态中存储字符串并有条件地渲染组件 但在某些情况下 将组件存储在状态中更简单 例如 const components useStat
  • 证书中的“主题”是什么意思? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 相关链接是这个MSDN 文章 http msdn microsoft com en us library bfsktky3 VS 80 a
  • getaddrinfo addrinfo 结果在堆栈或堆中

    至少我有点困惑 getaddrinfo 调用 更新 指向 addrinfo 结构的指针 当我要在同一范围 该函数 中使用 addrinfo 时一切都很好 但是如果我将该结构复制到另一个结构 通过分配它 会发生什么 请帮助我了解正在进行的基础
  • 在 mongodb 集群上创建第一个管理员用户时出现错误“无法添加用户:管理员未授权执行命令”

    我在谷歌云计算引擎中使用版本 3 4 的 mongoDB Cluster 实际上上周我的数据库受到了黑客的攻击 这就是为什么我考虑使用授权 这样我就可以避免这些类型的攻击 现在要添加授权我看到了这篇文章如何创建 mongodb 复制集群 h
  • 堆栈上的总变量大小是否有限制?

    在编码时 我们是否应该考虑对堆栈上创建的变量的总大小进行一些限制 如果是 我们应该根据什么来决定 它取决于操作系统 内存可用性等吗 是否有任何编译器选项可以检查这一点 任何指向该方向的指示也会有所帮助 这是 C 标准中不太用户友好的领域之一
  • 使用 EF 6 alpha3 Code First 和迁移创建 __MigrationHistory 表部署到 SQL Azure 时出错

    我首先使用 EF 6 alpha 3 代码 当我尝试运行 Update Database 命令在 SQL Azure 上创建数据库时 出现以下错误 此版本的 SQL Server 不支持没有聚集索引的表 请创建聚集索引并重试 我追踪到 Mi
  • 如何在 ASP.NET MVC 中创建友好的 URL?

    如何在 ASP NET MVC 框架中生成友好的 URL 例如 我们有一个如下所示的 URL http site catalogue BrowseByStyleLevel 1 1 是要浏览的学习级别 在本例中为较高级别 的 Id 但我想以与
  • 从 JTable 单元格获取值

    我在 Jtable 中创建了一个可编辑的列 完成单元格编辑后 我想要单元格中的旧值 您可以通过使用来获取该值 table getModel getValueAt row index col index where table是表的名称 它将
  • 如何使用 Shapeless 通用提取字段名称?

    给定一个案例类别A我可以使用以下代码片段使用 Shapeless 提取其字段名称 val fieldNames List String import shapeless import shapeless ops record Keys va
  • Flutter 任务 ':audioplayers:compileDebugKotlin' 执行失败

    我尝试安装audioplayers 0 17 1并运行我的扑动项目 它抛出以下错误 有人可以帮忙吗 e C Users User flutter pub cache hosted pub dartlang org audioplayers
  • Java HashMap 与 Int 数组

    我正在使用此代码来检查数组是否存在于HashMap public class Test public static void main String arg HashMap