当前位置: 首页 > 知识库问答 >
问题:

如何创建一个有两个键(Key-Pair,Value)的HashMap?

姚阳德
2023-03-14

我有一个二维整数数组。我想把它们放入一个散列图。但我希望基于数组索引访问来自HashMap的元素。类似于:

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

编辑:三年后,张贴的问题,我想添加一点更多

我遇到了nxn矩阵的另一种方式。

数组索引、ij可以通过以下方式表示为单个

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

并且可以通过以下方式从中重新检索索引:

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

共有1个答案

罗均
2023-03-14

有几种选择:

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()hashcode()在这里至关重要。然后只需使用:

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

和:

map.get(new Key(2, 5));
Table<Integer, Integer, V> table = HashBasedTable.create();
//...

table.get(2, 5);

table使用下面映射的映射。

请注意,特殊的key类是扩展到n维的唯一方法。您还可以考虑:

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

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

也许看看Scala,在这里您有元组和case类(用一行程序替换整个key类)。

 类似资料:
  • 问题内容: 我有一个2D整数数组。我希望将它们放入HashMap中。但是我想从基于数组索引的HashMap访问元素。就像是: 对于A [2] [5],它返回与该键关联的值。但是,如何使用一对密钥创建一个hashMap?或者通常是多个键:以一种我可以使用get(key1,key2,… keyN)来访问元素的方式。 编辑:发布问题3年后,我想再添加一点 我遇到了另一种方法。 数组索引,和可被表示为一个

  • 问题内容: 我需要快速创建一个只有两个圆角的矩形(也可以使用目标C代码)。 目前,我的代码正在创建两个矩形 和 并将它们合并(有两个直角和两个圆角),但是我对代码不满意,并且我很确定应该有更好的方法。 我是iOS和图形开发的新手。 问题答案: 在 Swift 2.3中, 您可以这样做 在 Objective-C中, 您可以使用class方法 示例实现- 并将上述方法称为-

  • 我知道我可以这样用一个根上下文写两个dispatchers servlet: @override public void onStartup(ServletContext ServletContext)抛出ServletException{ } 但是我如何使用AbstractAnnotationConfigDispatcherServletInitializer来实现这一点呢?如果不可能--为什么

  • 我试图用两个外键(分别用于categories和sub_categories表的category_id和sub_categories_id)为Products表创建一个播种器。 尝试了这个,但它返回了一个错误 未定义变量:类别 我可以创建种子只有子_类,但我需要创建的类别以及。我该怎么做?

  • 我成功创建了一个包含1个键和2个值的查找表: 但当我试图将其扩展到4个值时,我发现了一系列错误,我发现条目仅限于2个值! 那么,请,如何对1个键和4个值做类似的事情?我不能通过为第一个映射的第二个参数声明内部map.entry来扩展它。条目,因为在这一点上,第一个字符串不再是唯一的,我是说,映射的所有参数。条目 你们不需要走我走的路。你们可以自由地提供任何解决方案/数据结构,允许我存储和检索3个字

  • 我不知道如何创建以下内容: 我总是得到 /usr/include/c/5.5.0/bits/stl_对。h:139:45:错误:使用已删除的函数'std::atomic::atomic(const std::atomic 我已经试过了 我知道std::atomic是不可复制的,那么你应该如何创建一对呢?难道这不可能吗?