gpt4 book ai didi

java - 字符串数组作为 HashMap 的键

转载 作者:行者123 更新时间:2023-11-30 08:45:43 25 4
gpt4 key购买 nike

我需要为我们的项目解决两个问题,其中 (1) 我必须找到一种方法来将数组(String[] 或 int[])作为 Map 的键。要求是,如果两个数组的内容相等 (String[] a={"A","B"}, String[] b={"B","A"}) 那么它们应该被视为相等/相同的键,即,如果我使用 a 或 b 作为 Map 的键,则 a.equal(b)=true

我发现 Java Sets 添加了存储在其中的所有对象的哈希码。哈希码的添加允许比较两个哈希集,看它们是否相等,这意味着这种机制允许根据它们的内容比较两个 java 集合。

所以对于上面的问题我可以使用Sets作为Map的Key,但问题是我想使用Arrays作为Key。那么对此有什么想法吗?

(2) 接下来,我们对高效的部分 key 匹配机制感兴趣。例如,查看 Map 中是否有任何键包含数组的一部分,例如查找类似 Key.contains(new String[]{"A"}) 的内容。

请分享您的想法,任何替代方法,我关心空间和时间的最佳实现。因为这将用于数据流处理项目。所以空间和时间确实是一个问题。

最佳答案

Q1 - 如果您希望基于数组元素的键相等,则不能将裸数组用作 HashMap 键。数组从 java.lang.Object 继承了 equals(Object)hashCode() 实现,它们基于对象标识,而不是数组内容.

我能想到的最佳替代方案是将数组包装为(不可变)列表。

Q2 - 我认为没有一种简单有效的方法可以做到这一点。我能想到的最好的是:

  • 提取每个数组的所有可能子数组,并使每个子数组成为哈希表中的替代键。问题是键将占用 O(N M^2) 空间,其中 M 是主键 String[] 中字符串的平均(?)数量 的 .查找仍然是 O(1)

  • 构建一个倒排索引,给出每个字符串在所有键中的位置,然后对键空间中的字符串序列进行“短语搜索”。这应该在空间使用方面更好地扩展,但查找要昂贵得多。而且很复杂。

关于java - 字符串数组作为 HashMap 的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33160042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com