java - hashset和hashmap的多重关系
问题描述
我对这两个哈希集合的多重关系感到困惑,
从我在这里的另一篇文章中看到的,
HashSet 是一个集合,例如 {1,2,3,4,5}
HashMap是一个key -> value(key to value)映射,例如{a -> 1, b -> 2, c -> 2, d -> 1}
这看起来像 hashset 是一个绑定到一组数据的唯一 ID,例如。1 2 3 4 5. 这对我来说是一对多的关系
并且 hashMap 是 1 key to 1 value 是一对一的关系
在谷歌搜索以确认我的怀疑之后,我最终更加困惑。从这篇文章中,https://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/collections.html
它显示了在一对多和多对多关系中使用的 hashset,也有帖子显示了两者中使用的 hashmap。
HashSet 和 HashMap 可以同时用于一对多和多对多关系吗?
解决方案
谈论他们打算使用的实际方式,不!对于关系 A->B
但是,当我需要创建“一对多”关系时,我会求助于
HashMap<A,HashSet<B>>
这样做确实对关系的来源施加了唯一的约束。为避免这种情况,可以使用 HashMap 反向映射它
HashMap<B,A>
在多对多关系中,没有一个唯一键可用于访问一对元素。所以这基本上意味着整个数据集只是一个数据对列表。
List<{A,HashSet<B>}>
WrapperObject 有属性标识符,HashSet<>。这里的标识符不一定是唯一的。
如果您使用 @ManyToMany 注释,Spring/Ebean 正在内部使用它,您不必担心表示映射,因为它在帖子的示例中可见。您需要从单个实例的角度设置映射。
整个实例数组都会自动为您处理。
推荐阅读
- r - 在ggplot中为特定年龄以上和以下绘制条形图
- ffmpeg - 错误:未定义对“x264_encoder_open_155”的引用
- javascript - 如何“确定”用户的地理位置?
- javascript - 如何使用动态高度和固定表头使表体可滚动
- c - 将JSON文件中的数据提取到c中的结构
- javascript - vue签名板的签名厚度
- .net - 使用 docker 容器 (Windows) 运行 VB.NET 应用程序
- mysql - 使用 MySQL 计算所有行的列中出现的次数
- xml - 带有 GUI 的 XML 映射工具
- javascript - 我可以获取孩子的 CSS 属性并在父母身上使用它吗?