如何创建具有两个键(键对、值)的 HashMap?

2023-11-22

我有一个二维整数数组。我希望将它们放入 HashMap 中。但我想根据数组索引访问 HashMap 中的元素。就像是:

对于 A[2][5],map.get(2,5)它返回与该键关联的值。但是如何创建带有一对键的 hashMap 呢?或者一般来说,多个键:Map<((key1, key2,..,keyN), Value)我可以使用 get(key1,key2,...keyN) 访问该元素。

编辑:发布问题 3 年后,我想添加更多内容

我遇到了另一种方式NxN matrix.

数组索引,i and j可以表示为单个key通过以下方式:

int key = i * N + j;
//map.put(key, a[i][j]); // queue.add(key); 

索引可以从key这样:

int i = key / N;
int j = key % N;

有几种选择:

2个维度

地图的地图

Map<Integer, Map<Integer, V>> map = //...
//...

map.get(2).get(5);

包装关键对象

public class Key {

    private final int x;
    private final int y;

    public Key(int x, int y) {
        this.x = x;
        this.y = y;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Key)) return false;
        Key key = (Key) o;
        return x == key.x && y == key.y;
    }

    @Override
    public int hashCode() {
        int result = x;
        result = 31 * result + y;
        return result;
    }

}

实施equals() and hashCode()这里至关重要。然后你只需使用:

Map<Key, V> map = //...

and:

map.get(new Key(2, 5));

Table来自番石榴

Table<Integer, Integer, V> table = HashBasedTable.create();
//...

table.get(2, 5);

Table uses 地图的地图下。

N 维

请注意,特别Keyclass 是唯一可以扩展到 n 维的方法。您也可以考虑:

Map<List<Integer>, V> map = //...

但从性能角度以及可读性和正确性的角度来看,这很糟糕(没有简单的方法来强制列表大小)。

也许看看 Scala,其中有元组和case类(替换整个Key类与单行)。

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

如何创建具有两个键(键对、值)的 HashMap? 的相关文章

  • Spring控制器是线程安全的吗

    我遇到了这个控制器示例 想知道它是否是线程安全的 我特别想知道 gson 实例变量 import org springframework stereotype Controller import org springframework we
  • 任务“:app:dexDebug”执行失败

    我目前正在处理我的项目 我决定将我的 Android Studio 更新到新版本 但在我导入项目后 它显示如下错误 Information Gradle tasks app assembleDebug app preBuild UP TO
  • 检查双精度值的等于和不等于条件

    我在比较两者时遇到困难double values using and 我创建了 6 个双变量并尝试进行比较If健康 状况 double a b c d e f if a b c d e f My code here in case of t
  • 如何打印整个字符串池?

    我想打印包含文字的整个字符串池String使用添加的对象intern 就在垃圾收集之前 JDK有没有隐式的方法来进行这样的操作 我们如何检查字符串池 EDIT The comment suggests that there may be a
  • $scope.$digest 之后立即触发事件

    在我的 AngularJS 应用程序中 有几个点我想等待 scope被处理到 DOM 中 然后在其上运行一些代码 就像 jQueryfadeIn 例如 有没有办法监听某种 digestComplete 消息 我当前的方法是 设置后立即 sc
  • 由于连接超时,无法通过 ImageIO.read(url) 获取图像

    下面的代码似乎总是失败 URL url new URL http userserve ak last fm serve 126 8636005 jpg Image img ImageIO read url System out printl
  • 160 位 SHA1 哈希值的前 32 位是否可以替代 CRC32 哈希值?

    我正在开发一个 NET 3 5 项目 我需要一个 32 位哈希值 NET 加密类中似乎没有任何方法返回 32 位哈希 MD5 是 128 位 SHA1 是 160 位等 我实现了一个 CRC32 类 但我发现现有的 SHA1 和 MD5 哈
  • 有没有好的方法来解析用户代理字符串?

    我有一个Java接收模块User Agent来自最终用户浏览器的字符串的行为需要略有不同 具体取决于浏览器类型 浏览器版本甚至操作系统 例如 FireFox 7 0 Win7 Safari 3 2 iOS9 我明白了User Agent由于
  • Java 重写 hashCode() 得到 StackOverflowError

    所以我不太熟悉重写 hashCode 并且我似乎在 hashCode 方法中以某种方式进行了一些无限递归 这是我的场景 我有一个 DuplicateCache 类 它是一个缓存对象 用于检查系统中的重复对象 我有一个静态内部类 Duplic
  • 方法断点可能会大大减慢调试速度

    每当向方法声明行添加断点 在 Intellij IDEA 或 Android Studio 中 时 都会出现一个弹出窗口 方法断点可能会大大减慢调试速度 为什么会这样戏剧性地减慢调试速度 是我的问题吗 将断点放在函数的第一行有什么不同 Th
  • Android - 除了普通 SSL 证书之外还验证自签名证书

    我有一个通过 SSL 调用 Web 服务的 Android 应用程序 在生产中 我们将拥有由受信任的 CA 签名的普通 SSL 证书 但是 我们需要能够支持自签名证书 由我们自己的 CA 签名 我已经成功实施了接受自签名证书的建议解决方案
  • 如何将 XMP XML 块序列化为现有的 JPEG 图像?

    我有许多 JPEG 图像 其中包含损坏的 XMP XML 块 我可以轻松修复这些块 但我不确定如何将 固定 数据写回图像文件 我目前正在使用 JAVA 但我愿意接受任何能让这项任务变得容易的事情 这是目标关于 XMP XML 的另一个问题
  • @EnableTransactionManagement 的范围是什么?

    我试图了解正确的放置位置 EnableTransactionManagement多个 JavaConfig 上下文的情况下的注释 考虑以下场景 我在 JPAConfig java 和 AppConfig java 中有 JPA 配置以及一组
  • Java:VM 如何在 32 位处理器上处理 64 位“long”

    JVM 如何在 32 位处理器上处理 64 位的原始 long 在多核 32 位机器上可以并行利用多个核心吗 64 位操作在 32 位机器上慢了多少 它可能使用多个核心来运行不同的线程 但不会并行使用它们进行 64 位计算 64 位长基本上
  • 尝试在没有 GatewayIntent 的情况下访问消息内容

    我希望每当我写一条打招呼的消息时 机器人都会在控制台中响应一条消息 但它只是给我一个错误 JDA MainWS ReadThread WARN JDA Attempting to access message content without
  • 打印包含 JBIG2 图像的 PDF

    请推荐一些库 帮助我打印包含 JBIG2 编码图像的 PDF 文件 PDFRenderer PDFBox别帮我 这些库可以打印简单的 PDF 但不能打印包含 JBIG2 图像的 PDF PDFRenderer尝试修复它 根据 PDFRedn
  • jmap - 组织和堆操作会给 jvm 带来开销吗?

    正如标题所述 需要多少开销jmap histo and jmap heap分别带到jvm 如果一个内存敏感的 Java 进程处于OutOfMemory 例如 大约 96 的堆已满 并且无法通过 full gc 清除 其中一项操作是否有可能将
  • 如何使用 Mockito 和 Junit 模拟 ZonedDateTime

    我需要模拟一个ZonedDateTime ofInstant 方法 我知道SO中有很多建议 但对于我的具体问题 到目前为止我还没有找到任何简单的解决办法 这是我的代码 public ZonedDateTime myMethodToTest
  • ExceptionHandler 不适用于 Throwable

    我们的应用程序是基于 Spring MVC 的 REST 应用程序 我正在尝试使用 ExceptionHandler 注释来处理所有错误和异常 I have ExceptionHandler Throwable class public R
  • Java 编码风格、局部变量与重复方法调用

    我更喜欢使用局部变量而不是多次调用同一方法 I prefer this Vehicle vehicle person getVehicle if vehicle instanceof Car Car car Car vehicle car

随机推荐

  • iPhoneSDK从CATransform3D计算旋转角度

    如何通过将 CATransform3D 结构作为输入来计算绕 Z 轴的弧度旋转 基本上我需要的是相反的CATransform3DMakeRotation 这取决于您在哪个轴上进行旋转 绕 z 轴的旋转表示为 a angle in radia
  • Teamcity - 哪个外部差异查看器

    您知道有哪些工具可以用作 Teamcity 的 Visual Studio 插件的外部差异查看器吗 我正在使用 Visual Studio 2010 Pro 和 Teamcity 5 1 2 We use 超越比较3与 TeamCity 插
  • 谷歌文本转语音 API

    我想知道如何在我的 NET 项目中使用 Google Text to Speech API 我认为我需要调用一个 URL 来使用 Web 服务 但我的想法并不清楚 有人可以帮忙吗 旧答案 尝试使用此网址 它将自动生成一个 wav 文件 您可
  • Go:跟踪 POST 请求进度

    我正在 Go 中为 Linux 编写一个 ShareX 克隆 它通过 http POST 请求将文件和图像上传到文件共享服务 我目前正在使用 http Client 和 Do 发送我的请求 但我希望能够跟踪需要最多一分钟上传的较大文件的上传
  • 为什么 Scala 找不到 org.apache.commons.lang 包?

    我想用org apache commons lang NotImplementedException因为它似乎是 Java Scala 域中唯一的 NotImplementedException 实现 我记得我曾经在 Scala 2 8 1
  • NSTextField 像 safari 地址栏

    构建像 Safari 中那样的地址字段的最佳方法是什么 需要有可编辑的文本和确定的进度指示器背景 你可以直接子类化NSTextField并覆盖 drawRect 方法用某种颜色或渐变 或其他 来 填充 整个宽度的适当百分比以用于进度 如果我
  • 局部变量作用域的问题。怎么解决呢?

    我在尝试执行时收到以下错误statemet executeUpdate 在我的代码中 Local variable statement defined in an enclosing scope must be final or effec
  • 从 grails 2.3.8 2.4 升级时出现资源插件错误

    我正在关注docs尝试将我的项目从 2 3 8 升级到 2 4 但我遇到了这些错误 localhost startStop 1 ERROR resource ResourceProcessor Unable to load resource
  • 链接外部文件时列出属性的顺序是否正确?

    在 HTML 中声明外部文件 例如 css 或 js 时 是否存在放置链接属性的正确顺序 例如 or or 这有关系吗 同样的问题也适用于链接到外部 JavaScript 文件的属性 谢谢你的时间 不 属性顺序无关
  • CSS无限旋转动画

    我想通过 CSS 旋转我的加载图标 我有一个图标和以下代码 div div
  • COPY 命令:仅从 csv 复制特定列

    我有一个关于COPYPostgreSQL 中的命令 我有一个 CSV 文件 我只想将其中一些列值复制到我的 PostgreSQL 表中 是否有可能做到这一点 我熟悉使用COPY命令使用标题将 CSV 中的所有数据复制到表中以映射到列名称 但
  • OpenCV - 如何从 uint8_t 指针创建 Mat

    我有以下 C 代码 void foo const uint8 t data int height int width need to create a cv Mat from data which is a pointer to grays
  • Nunit-C#:通过编码运行特定测试

    我使用 Selenium 和 C 进行自动化 我想通过代码调用 NUnit 如下所示 CoreExtensions Host InitializeService TestPackage testPackage new TestPackage
  • 如何计算两个 WGS84 坐标之间的方位角(向北的角度)

    我有两个 WGS84 坐标 纬度和经度 以度为单位 这些点非常接近 例如相距仅一米 有没有一种简单的方法可以计算这些点之间的线的方位角 即向北的角度 天真的方法是假设一个笛卡尔坐标系 因为这些点非常接近 并只使用 sin a abs L2
  • 如何编写自己的复制和粘贴上下文菜单?

    我正在编写一个带有 EditText 驱动小部件的应用程序 我想创建自己的复制和粘贴菜单 要替换 EditText 上的 android 默认菜单 我应该做什么 只是覆盖长按 或者还有其他方法来实施吗 提前致谢 EditText 应该已经启
  • 在.Net Core中使用CSharpCodeProvider

    我有一些 C 代码 可以从 SOAP WSDL 和 Swagger 文档动态生成源代码 然后使用 CSharpCodeProvider 类的名为 CompileAssemblyFromSource 的方法对其进行编译 使用 Net 4 8
  • 如何在Windows 7中设置应用程序的任务栏图标

    如何在 PyQt4 中设置应用程序的任务栏图标 我尝试过setWindowIcon 它成功地将图标设置在主窗口的左上角 但它不会影响Windows 7任务栏中显示的图标 任务栏图标仍然是默认的Python pyw图标 这是我的代码 from
  • __POSIX_VISIBLE 正在破坏我在 cygwin 上的 pthreading

    我正在编译一个在 cygwin 上使用 pthreads 和 gcc 确切地说是 g 的项目 鉴于我一直在linux上开发这个 我从来没有遇到过任何问题 但现在 我无法编译使用某些 pthread 函数的代码 编译器抱怨这些函数未声明 我意
  • 如何在 Linux 上中断任意 TCP/IP 连接?

    是否有任何命令可用于中断某个程序的现有 TCP IP 连接 操作系统是否知道 TCP 连接中的任何内容 或者操作系统是否只看到本地套接字上的 TCP 传输 并且不知道哪个请求被发送到哪个套接字 例如 如果 Firefox 向某个服务器的端口
  • 如何创建具有两个键(键对、值)的 HashMap?

    我有一个二维整数数组 我希望将它们放入 HashMap 中 但我想根据数组索引访问 HashMap 中的元素 就像是 对于 A 2 5 map get 2 5 它返回与该键关联的值 但是如何创建带有一对键的 hashMap 呢 或者一般来说