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

HashMap中的复合键,其中一个值具有不关心关系

龚德本
2023-03-14

我想设计一个HashMap,它有多个字符串/枚举作为复合键。我想更改功能,这样,如果映射中填充了一个enum/string值作为“default”,那么它将匹配搜索中的任何内容

如果特定值不存在,这里的关键是将anyvalue与“default”匹配。

假设下面的类是这个HashMap的关键类:

class KeyClass{
  String val1;
  String val2;
  String val3;
}

HashMap<KeyClass, String> randomMap = new HashMap<>;

randomMap.put(new KeyClass("abc", "default", "efg"), "value1");
randomMap.put(new KeyClass("abc", "def", "efg"), "value2");
randomMap.get(new KeyClass("abc", "wef", "efg")); // should return "value1" as "wef" should match to default, 
randomMap.get(new KeyClass("abc", "def", "efg")) // should return "value2", as it explicitly matches

具体来说,我想了解这种映射结构的设计建议(对于instace,它是否可以与两种不同的映射等一起使用),或者如果可能的话,如何为这样一个键类实现hashCode函数。

共有1个答案

屈博
2023-03-14

如果我正确理解了你的问题,这是不可能的。我认为你需要使用HashMap以外的其他东西来实现这一点。

HashMap使用key类的hashcode/equals方法进行匹配,因此我将您的问题解释为如何实现这些方法。

hashcode实际上很简单。我想你唯一的选择就是返回一个常数。这是一个愚蠢的想法,但如果“默认”匹配任何内容,这都是必要的。

equals无法实现。您所描述的匹配将不是留档(https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#equals(java.lang.对象))所要求的对称和传递的。

 类似资料:
  • 我有一个哈希图,其中一些键指向相同的值。我想找到所有相等的值并打印相应的键。 这是我拥有的当前代码: 当前代码将重复项两次添加到列表中,但它也将每个键添加一次。 谢谢。

  • 我今天面试了,我的面试官问我如何在HashMap中存储具有相同键的多个值?她给了我这个例子—— 我在如何使用HashMap时给了她以下解决方案: 整数是字符串的长度,ArrayList将存储该特定长度的字符串。 面试官说这是使用HashMap的一种方式,但还有另一种方式我不需要ArrayList或任何其他数据结构。在面试期间,我无法想出任何解决方案,现在在谷歌搜索了足够多之后,我仍然一无所获。有人

  • 问题内容: 我想在Java中实现具有多个值的哈希表,即 并且将返回2倍的值。 我怎样才能做到这一点? 问题答案: 您可以改用Multimap。它在列表中为一个键保留多个值。在commons- collection 和Guava中有实现。 这类似于使用值是列表的Hashmap,但是不必显式创建列表。 自己动手做的同一示例如下所示: 请注意,您可以将Multimap用作构建器,并对其调用asMap以返

  • 问题内容: 如果我有,并且为其返回a ,那么如何获取相应的键?我是否必须遍历哈希图?最好的方法是什么? 问题答案: 如果你选择使用Commons Collections库而不是标准Java Collections API,则可以轻松实现此目的。 Collections库中的BidiMap接口是一个双向映射,使你可以将键映射到值(如法线映射),也可以将值映射到键,从而允许你在两个方向上执行查找。ge

  • 我在oracle数据库中有一个包含客户数据的表。以下是一个简化的定义: 此表的主键是。 该表有许多行,其中为空。在数据库级别,没有问题,但是当我试图通过JPA实体访问这些行时,会导致一些问题: 1:使用