我是 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/