社交图分配

时间:2011-12-01 22:25:19

标签: graph social-networking

我有一个社交图谱分配,我非常清楚我想做什么,我只是想知道我是否在正确的轨道上,以及你们可以提供的任何提示。

无论如何,相当简单的实现(我在这里找到了一个非常复杂的实现 - How to model social graph in Java,但我认为它远远超过我实际需要的)。基本上我的想法是制作一个“用户”对象和一个散列图来保存所有内容。一个用户对象将包含4个数据结构 - 名称(字符串),学生(布尔),学校(字符串)和朋友(整数数组) )。

每个用户都将被添加到hashmap中,从而获得一个唯一的密钥。当要建立友谊时,例如在A和B之间,我会在散列图中找到用户A,并将用户B的密钥添加到A的朋友阵列中,反之亦然。这样我就可以跟踪每个人和他们的朋友。

这有意义吗?它在我脑海中起作用,但我觉得我在实现中遗漏了一些东西,这会使它不能像我认为的那样工作。

3 个答案:

答案 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作为密钥。

还有许多其他建议广泛依赖于模型的预期用法。所以,我没有理由深入了解所有这些。