我有两张桌子:
Users (id, name, lastname)
Friends (id1, id2)
鉴于这 2 个表,我需要能够找到 2 个用户之间的距离 d(id1,id2)
我定义了一个用户类,它包含表中的每个用户属性。
我需要建立一个图表。我的图表数据结构是
Map<User, Set<User>>
将用户映射到他的一组朋友。我如何构建图表?我在数据库中查询了数据库中所有用户的 ID。我有一个
int[] userids
然后对于这个数组中的每个 int:
(1)我建立一个用户对象,在数据库中获取该用户的属性
(2) 我在数据库中查询 Friends 表以获取该用户的朋友的 ID:
int [] friends
(3) 对于这个朋友数组中的每个 int,我构建了一个用户对象,在数据库中获取该用户的属性并将其添加到
Set<User> friends = new Set<User>();
问题 1:任何想法如何更好地做到这一点?考虑到我有 500 个用户和 Friends 表中有 20000 个条目,这需要很长时间......
这里的大问题是,当数据库中的 2 个用户“相同”时,他们在我的图中的不同对象中被引用!
这弄乱了我的距离算法。我从用户 u 开始,获取他的 Friends {f1,f2} ,当我想使用 graph.get(f1) 和 graph.get(f2) 获取朋友的朋友时,我得到 null (原因在我的问题中说明,即在许多不同的用户对象中的 1 个 db 用户)
我需要找到一种方法来构建我的图表,以便在堆中的一个且唯一的用户对象中引用 1 个给定用户说 (1, John, Doe) ...
问题2:如何??
非常感谢