Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对多个键具有相同值且可通过单个键进行搜索的数据结构_Java_Data Structures_Time Complexity_Space Complexity - Fatal编程技术网

Java 对多个键具有相同值且可通过单个键进行搜索的数据结构

Java 对多个键具有相同值且可通过单个键进行搜索的数据结构,java,data-structures,time-complexity,space-complexity,Java,Data Structures,Time Complexity,Space Complexity,我有一个用例,其中我必须维护键值对存储,所有键都是唯一的,多个键可以映射到同一个值。此外,它应该可以通过每个单独的键进行搜索 例如: 在K2上搜索它应该返回V1 它有点类似于Multikeymap,但可以通过单个键进行搜索。是否有任何数据结构允许我在O(1)中执行此操作。没有这样的DS可以在恒定的O(1)时间内给出结果,但HashMap应该足够好了。对于插入、删除和搜索操作,哈希映射的平均复杂度为O(1)。如果您使用的是JDK8,那么频繁冲突对性能的影响也会更小。请参阅: 因为只有值的引用存储在

我有一个用例,其中我必须维护键值对存储,所有键都是唯一的,多个键可以映射到同一个值。此外,它应该可以通过每个单独的键进行搜索

例如:

在K2上搜索它应该返回V1


它有点类似于Multikeymap,但可以通过单个键进行搜索。是否有任何数据结构允许我在O(1)中执行此操作。

没有这样的DS可以在恒定的O(1)时间内给出结果,但HashMap应该足够好了。对于插入、删除和搜索操作,哈希映射的平均复杂度为O(1)。如果您使用的是JDK8,那么频繁冲突对性能的影响也会更小。请参阅:

因为只有值的引用存储在映射中,所以即使键的数量和值之间不匹配,存储也不应该是一个大问题

如果键不是Long、String、Int等,并且是一些自定义对象,请不要忘记重写hashcode和equals方法

如果这仍然不能满足您的要求,那么请查看Guava和Apache Commons集合库中的这些链接,但您可能需要收集有关其性能数字的一些信息:


  • java HashMap将让您实现它。一个常规的
    HashMap
    实现应该满足您的需要,您只需要确保在您的键控类中定义了
    hashCode()
    equals()
    。正常的映射工作正常。在K3上搜索会返回什么?(V1,V2)?@DavidConrad根据snippet.HashMap前面的要求,这似乎是一个输入错误。HashMap将存储相同值的多个副本,这是我想要避免的。因为值比键小得多。HashMap将为每个键存储单独的引用,但它们都可以指向相同的引用。它不会对对象进行深度复制;所以
    get(K1)==get(K2)
    (相同的参考)。但是,这确实意味着,如果您将K1更新为指向不同的V4,则K2和K3仍将指向原始V1,除非您采取其他步骤更新它们中的每一个。在你的情况下,这可能是可取的(或不可取的)。
    (K1,K2,K3) -> V1
    (K3,K4) -> V2
    (K5) -> V3
    
    and so on.