1

我有两张桌子:

    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:如何??

非常感谢

帮助 Java Graph 实现

4

1 回答 1

0

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

您最好从数据库中获取所有数据并自己用 Java 构建图形。

select UserId, ... from Users;

正如您现在所做的那样,User为每个用户构建一个。您需要创建一个Mapfrom userIdtoUser以在步骤 2 中使用(这样您就不会User为同一个对象获得多个对象userId)。

select id1, id2 from Friends;

然后查找Map上面的两个id,然后分别添加User到对方User的出边集。

于 2012-04-20T17:04:29.740 回答