我对Java比较陌生,我对哪种类型的数据结构最适合我的情况有疑问.我有一组基本上是键值对的数据,但是每个值可以对应于多个键,并且每个键可以对应于多个值.一个简化的例子是:
考虑到上面的例子,我需要能够返回我拥有的颜色苹果和/或我拥有的红色水果.实际数据将基于输入文件动态生成,其中每个集合将是100-100,000个值,并且每个值可以对应于另一个集合中的数百个值.
存储和解析这些数据的最有效方法是什么?我希望尽可能使用java本机的解决方案,而不是像外部数据库那样的东西.
这个问题是相关的,但我不确定如何在我的情况下应用解决方案,因为我需要在两个方向上为每个键分配多个值.
我正在实施一个系统,我有一个名单列表,每个人有1个电话号码.我需要能够取一个名字并查找电话号码,或者拿一个电话号码并查找姓名.
我知道我可以通过两个哈希表来实现这一点 - 一个从名称到电话号码,一个从电话号码到名字.然后我可以在O(1)时间向任意方向查找.然而,这似乎是我存储了太多数据 - 每个名称和每个电话号码都存储了两次.
有没有办法更有效地做到这一点?我应该使用什么数据结构来存储姓名和电话号码?
如果相关,我用Java编码.
非常感谢!
现在,在你责骂我之前,我知道有一个非常相似的问题:
事实上,我正在寻找一种能够完成同样事情的数据结构。具体来说,我有一个字符串应该映射到另一个字符串,并且其他字符串也应该映射到原始字符串。
例如:
".jpg" -> "image/jpeg"
"image/jpeg" -> ".jpg"
Run Code Online (Sandbox Code Playgroud)
链接的问题建议使用某种哈希图或Dictionary<string,string>来完成此任务。
人们将拥有一种自定义数据类型,该类型将保存两个字典,每个字典都是一种映射方式。这将提供 O(1),但我发现它根本不可扩展。
考虑到我有一个字典,其中包含从 200 个 MIME 类型到关联文件扩展名的所有映射,我需要创建一个类似的字典,内容相同但相反。这很容易出现拼写错误或丢失键,并且有很多重复的代码。
虽然链接的问题旨在Java中的解决方案,但我正在寻找C#中的解决方案。
是否有.NET 数据结构支持对象之间的这种双向映射?
如果没有,我如何在不复制代码的情况下完成此任务(如两个字典解决方案中所示)?