【发布时间】:2016-01-14 14:10:22
【问题描述】:
我需要为我们的项目解决两个问题,其中 (1) 我必须找到一种方法可以将数组(String[] 或 int[])作为 Map 的键。要求是,如果两个数组的内容相等 (String[] a={"A","B"}, String[] b={"B","A"}) 那么它们应该被认为是相等/相同的键,即如果我使用 a 或 b 作为 Map 的键,则 a.equal(b)=true
我发现 Java Sets 添加了存储在其中的所有对象的哈希码。哈希码的添加允许比较两个哈希集,看看它们是否相等,这意味着这种机制允许根据它们的内容比较两个 java Set。
所以对于上述问题,我可以使用 Sets 作为 Map 的 Key,但问题是我想使用 Arrays 作为 Key。那么有什么想法吗?
(2) 接下来,我们对高效的部分密钥匹配机制感兴趣。例如,查看 Map 中的任何键是否包含 Array 的一部分,例如查找 Key.contains(new String[]{"A"}) 之类的东西。
请分享您的想法,任何替代方式,我关心空间和时间优化实现。因为这将用于数据流处理项目。所以空间和时间真的是个问题。
【问题讨论】:
-
为方便起见,您最好使用
Set;这样,您可以保证equals和hashCode发生的情况的行为。 -
另见Can a java array be used as a HashMap key。正如建议的那样,您应该改用
Set,因为您不能覆盖数组的equals/hashCode的行为。 -
好的,第二个问题呢,有什么想法吗?
-
对于第二部分,trie(或
TreeMap)可能有用:Partial search in HashMap
标签: java