我有2张桌子:

    Users (id, name, lastname)
    Friends (id1, id2)


给定这两个表,我需要能够找到2个用户d(id1,id2)之间的距离

我定义了一个User类,该类保存表中的每个user属性。

我需要建立一个图形。我的图表数据结构是

     Map<User, Set<User>>


将用户映射到他的一组朋友。
如何建立图表?我向数据库查询数据库中所有用户的ID。我有一个

   int[] userids


然后对于此数组中的每个int:

(1)我建立一个User对象,在db中获取该用户的属性

(2)我查询数据库中的Friends表,以获取该用户的朋友的ID:

    int [] friends


(3)对于这个friends数组中的每个int,我构建一个User对象,在db中获取该用户的属性并将其添加到

    Set<User> friends = new Set<User>();


问题1:有什么想法可以更好地做到这一点?假设我有500个用户,并且在Friends表中有20000个条目,这将永远花费...

这里最大的问题是,当2个用户在数据库中为“相同”用户时,它们在我的图形的differents对象中被引用!

这弄乱了我的距离算法。我从一个用户u开始,得到他的Friends {f1,f2},当我想使用graph.get(f1)和graph.get(f2)成为朋友时,我得到null(由于我的问题中所述的原因) ,即在许多不同的User对象中有1个db用户)

我需要找到一种构建图的方法,以便在一个堆中仅引用一个给定的用户说(1,John,Doe)(仅一个User对象)。

问题2:如何?

非常感谢

Help with Java Graph Implementation

最佳答案

一次读取一个用户将很慢,这是数据库的许多往返。如果Friends表上没有索引,它将特别慢。

您最好只是从数据库中获取所有数据,然后自己用Java构建图形。

select UserId, ... from Users;


就像您现在所做的那样,为每个用户构建一个User。您将要创建一个从MapuserIdUser,以在第2步中使用(因此,对于同一User,您不会获得多个userId对象)。

select id1, id2 from Friends;


然后在上面的Map中查找两个ID,然后将每个User添加到另一个User的出站边缘集中。

关于java - 数据库中Java图形的实现,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10249830/

10-16 18:03