java - 哪种Java数据结构最适合双向多值映射

标签 java dictionary data-structures bidirectional multivalue

我是 Java 的新手,我想知道哪种类型的数据结构最适合我的情况。我有一组数据,它们本质上是键值对,但是每个值可能对应多个键,每个键可能对应多个值。一个简化的例子是:

  • 红苹果
  • 青苹果
  • 红草莓
  • 青葡萄
  • 紫葡萄

考虑到上面的例子,我需要能够返回我有什么颜色的苹果和/或我有什么红色水果。实际数据将根据输入文件动态生成,其中每组将包含 100-100,000 个值,每个值可能对应另一组中的数百个值。

存储和解析这些数据的最有效方法是什么?我更喜欢尽可能原生于 Java 的解决方案,而不是诸如外部数据库之类的解决方案。

This question是相关的,但我不确定如何在我的案例中应用该解决方案,因为我需要在两个方向上为每个键分配多个值。

最佳答案

因为在 Map 中不能有重复的键, 你可以创建一个 Map<Key, List<Value>> ,或者如果可以的话,使用 Guava's Multimap .

Multimap<String, String> multimap = ArrayListMultimap.create();
multimap.put("Red", "Apple");
multimap.put("Red", "Strawberry");

System.out.println(multimap.get("Red"));  // Prints - [Apple, Strawberry]

但问题是你不能请求给定对象的键,如果我找到其他东西,我会继续寻找、制作和编辑,希望它能有所帮助。

不过,您仍然可以通过迭代映射并找到对象的键来自己进行反向操作。

关于java - 哪种Java数据结构最适合双向多值映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28635202/

相关文章:

algorithm - 当我们知道大多数插入都是有序的时候创建 BBST 的策略?

java - 是否可以在 Java 中使用 SQOOP 从 MySQL 读取/写入 Hadoop 作业?

java - 如何使用 Maven 组件插件打包 Spring Boot Web 应用程序

Python 嵌套字典使用列表中的项目

python - 将 Pandas 数据框单元格中的字典解析为新行单元格(新列)

arrays - 整数数组中每对的距离与最大值的乘积之和

java - 创建支持实习的对象的良好模式?

java - 扫描无效输入时出错

c++ - 映射构造函数如何以类比较的形式使用?

data-structures - Linux内核中的哈希表