java - 使用双键创建 HashMap

标签 java data-structures hashmap key

我正在为我的问题寻找合适的数据结构。我希望能够使用两个键尽可能高效地选择节点对象。插入和删除也需要高效。基本上每个节点对象都有一对两个键。这些对是唯一的,但各个 key 不是。我需要能够为两个键之一选择具有特定值的一组节点。

示例:

节点1有键a1和b1

节点2有键a1和b2

节点 3 有 key a2 和 b2

例如,我希望能够选择具有键 a1、b1 的节点以及具有 b2 作为键 2 的所有节点。

我当然可以制作两个 HashMap(每个键一个),但这是一种丑陋的解决方案,因为当我添加或删除某些内容时,我必须在两个映射中都这样做。由于将进行大量添加和删除操作,因此我宁愿一次完成。有人对如何执行此操作有任何想法吗?

显然,将两个键合并在一起的单个键并不能解决问题,因为我还需要能够搜索单个键,而不必搜索整个 map 。那不会很有效率。问题是效率问题。我可以只在 map 中的每个条目中搜索特定键,但我想使用哈希,以便我可以立即使用两个键之一选择多个节点对象。

我不是在寻找像 MultiKeyMap 这样的东西,因为在这个数据结构中,第一个键总是保持不变,你只能添加键而不是用不同的键替换第一个键。我希望能够在第一个和第二个键之间切换。

我想也不想用同一个键存储多个对象。如果您查看示例,您会发现这两个键始终是唯一的。这可以看作是一个键,因此我不会在同一个键下存储多个对象。但是,如果您查看各个键,这些键并不是唯一的,因此我确实想存储多个由各个键引用的对象。

最佳答案

如果你可以使用图书馆,看看 Table Guava 的界面。它将一行和一列与一个值相关联。行和列可能是您的第一个和第二个键。您还可以按行或按列进行搜索。

这个接口(interface)的一个实现是hash based .

关于java - 使用双键创建 HashMap ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8591162/

相关文章:

java - Java 中的 Action 监听器

java - 如何更改 SWT 按钮背景颜色或使其透明

android - 如何使用 Retrofit 2 获取 hashmap 响应

java - jarsigner 中的 *.SF 文件有什么意义?

data-structures - 你在业务编程中使用链表、双向链表等吗?

java - 用Java计算对象的大小

c - 在 C 中声明一个动态数组?

java - 使用并发 HashMap

javascript - 如何通过操作特定键从对象创建 HashMap

java - 通过在java中保持行跟踪来读取文件