我有一个社交图谱分配,我非常清楚我想做什么,我只是想知道我是否在正确的轨道上,以及你们可以提供的任何提示。
无论如何,相当简单的实现(我在这里找到了一个非常复杂的实现 - How to model social graph in Java,但我认为它远远超过我实际需要的)。基本上我的想法是制作一个“用户”对象和一个散列图来保存所有内容。一个用户对象将包含4个数据结构 - 名称(字符串),学生(布尔),学校(字符串)和朋友(整数数组) )。
每个用户都将被添加到hashmap中,从而获得一个唯一的密钥。当要建立友谊时,例如在A和B之间,我会在散列图中找到用户A,并将用户B的密钥添加到A的朋友阵列中,反之亦然。这样我就可以跟踪每个人和他们的朋友。
这有意义吗?它在我脑海中起作用,但我觉得我在实现中遗漏了一些东西,这会使它不能像我认为的那样工作。
答案 0 :(得分:1)
这个问题的答案取决于您的社交图表的要求和要做的事情(特别是您是否要保留数据)。
如果你使用hashmap作为你的用户存储,那么我假设你有一个单独的类来生成你的id(或者你有一个包装hashmap并生成它们的UserStore类)?如果您没有删除用户,那么您可以在存储时使用ArrayList,索引是用户密钥。
当涉及到用户自己时,您可以将他们的朋友放在列表中,但这可能会使您的删除用户代码稍微复杂化(假设您具有该功能)。
更新:
如果您想进行分析,那么您可以通过将用户的朋友存储为Set<“UserKey”>来获得一些好处。而不是作为一个数组(但取决于你计划如何进行分析)。您仍然需要一个计数器类(或者指定ID的主UserStore类)。
答案 1 :(得分:0)
我会在User对象中添加一些形式的“主键”,这个数字可能是sintetic(从全局整数计数器中获取下一个数字)。这样,您可以避免从其他用户的数据生成hashCode()值的情况,然后您可以避免Map内部的冲突。
答案 2 :(得分:0)
嗯,它可以工作。
您唯一可以肯定的是,向User
添加HashMap
并不会“给”一个密钥。密钥应该由你以某种方式创建。您可以选择用户的名字,姓氏或生成增量ID。您可以将User
添加到HashMap
,方法是为其添加密钥,并将User
作为值。每次要从User
检索HashMap
时,您都必须使用该密钥。
在您的情况下,如果名字和姓氏是唯一的,请使用firstName + " " + lastName
作为密钥。
还有许多其他建议广泛依赖于模型的预期用法。所以,我没有理由深入了解所有这些。