Graph 社会图分配

Graph 社会图分配,graph,social-networking,Graph,Social Networking,我有一个社交图任务,我对我想做的事情有一个很好的想法,我只是想知道我是否走上了正确的道路,以及你们能提供的任何提示 无论如何,这是一个相当简单的实现(我在这里发现了一个非常复杂的实现-,但我认为它远远超过了我实际需要的)。本质上,我的想法是创建一个“用户”对象和一个hashmap来保存所有内容。一个用户对象将有4个数据结构-名称(字符串)、学生(布尔)、学校(字符串)和朋友(整数数组) 每个用户都将被添加到hashmap中,并因此获得一个唯一的密钥。当建立友谊时,比如说在a和B之间,我在hash

我有一个社交图任务,我对我想做的事情有一个很好的想法,我只是想知道我是否走上了正确的道路,以及你们能提供的任何提示

无论如何,这是一个相当简单的实现(我在这里发现了一个非常复杂的实现-,但我认为它远远超过了我实际需要的)。本质上,我的想法是创建一个“用户”对象和一个hashmap来保存所有内容。一个用户对象将有4个数据结构-名称(字符串)、学生(布尔)、学校(字符串)和朋友(整数数组)

每个用户都将被添加到hashmap中,并因此获得一个唯一的密钥。当建立友谊时,比如说在a和B之间,我在hashmap中找到用户a,并将用户B的密钥添加到a的friends数组中,反之亦然。这样我就可以跟踪每个人以及他们的朋友


这有意义吗?这在我的头脑中是可行的,但我觉得我在实现中缺少了一些东西,这些东西会使这项工作不如我认为的那样有效。

我会向用户对象添加某种形式的“主键”,一个可能是sintic的数字(从全局整数计数器中获取下一个数字)。通过这种方式,您可以避免从其他用户的数据生成hashCode()值的情况,然后可以避免映射内部的冲突。

我将向用户对象添加某种形式的“主键”,一个可能是sintic的数字(从全局整数计数器中获取下一个数字)。通过这种方式,您可以避免从其他用户的数据生成hashCode()值的情况,然后您可以避免地图内部的冲突。

这一问题的答案将取决于需求以及您希望对社交图执行的操作(尤其是您是否希望持久化数据)

如果您使用hashmap作为您的用户存储,那么我假设您有一个单独的类来生成您的id(或者您有一个UserStore类来包装hashmap并生成它们)?如果您没有删除用户,那么您可以在存储时拥有一个ArrayList,索引就是用户密钥

当涉及到用户本身时,您可以将他们的朋友保存在一个列表中,但这可能会使您的删除用户代码稍微复杂一些(假设您具有该功能)

更新:


如果您想进行分析,那么将用户的好友存储为一个集合而不是一个数组可能会带来一些好处(但这取决于您计划如何进行分析)。您仍然需要一个计数器类(或分配ID的master UserStore类)。

这个问题的答案将取决于需求以及您希望对社交图执行的操作(特别是您是否希望持久化数据)

如果您使用hashmap作为您的用户存储,那么我假设您有一个单独的类来生成您的id(或者您有一个UserStore类来包装hashmap并生成它们)?如果您没有删除用户,那么您可以在存储时拥有一个ArrayList,索引就是用户密钥

当涉及到用户本身时,您可以将他们的朋友保存在一个列表中,但这可能会使您的删除用户代码稍微复杂一些(假设您具有该功能)

更新:

如果您想进行分析,那么将用户的好友存储为一个集合而不是一个数组可能会带来一些好处(但这取决于您计划如何进行分析)。您仍然需要一个计数器类(或分配ID的主UserStore类)。

好吧,它可以工作

唯一可以肯定的是,将
用户
添加到
HashMap
中并不会“给”它一个键。密钥应该由您以某种方式创建。您可以选择用户的名字、姓氏或生成增量id。您可以将
用户
添加到
哈希映射
,方法是将该键和
用户
作为值。每次要从
HashMap
检索
用户时,都必须使用该键

在您的情况下,如果名字和姓氏是唯一的,请使用
firstName+“”+lastName
作为键

还有许多其他建议广泛依赖于模型的预期用途。所以,我看不出有什么理由把这些都扯进去。

好吧,这是可行的

唯一可以肯定的是,将
用户
添加到
HashMap
中并不会“给”它一个键。密钥应该由您以某种方式创建。您可以选择用户的名字、姓氏或生成增量id。您可以将
用户
添加到
哈希映射
,方法是将该键和
用户
作为值。每次要从
HashMap
检索
用户时,都必须使用该键

在您的情况下,如果名字和姓氏是唯一的,请使用
firstName+“”+lastName
作为键


还有许多其他建议广泛依赖于模型的预期用途。所以,我看不出有什么理由去讨论所有这些。

我猜你可能会暗示OP将从数据生成密钥,但是他们确实指定了unique,因此给出了一个unique密钥。因此,如果我理解正确,当我实例化一个新的用户对象时,应该立即从计数器中给他们一个密钥,因此,创建的第一个用户得到1,第二个用户得到2,以此类推。然后,当将这些用户添加到hashmap容器中时,我应该使用user对象作为值,我给他们的这个键作为hashmap的键。这对吗?没错。因为你说过某人的朋友被表示为一个整数值数组(这将是用户进入哈希表的键),所以除非你有一个简单的方法来产生一个不会产生冲突的哈希函数,那么一个简单的全局计数器就是这个问题的一个简单解决方案。我想你可以暗示OP将从数据中生成密钥,不管他们是怎么做的