2010-04-20 76 views
2

我有两个关系A和B,都具有所有整数属性(A {a1,a2,a3,...} B {b1,b2,b3,...}。我将如何hash-在Java中加入这两个用户会选择两个加入属性我做两个哈希表然后继续加入它们吗?哈希加入java

+2

http://en.wikipedia.org/wiki/Hash_join – polygenelubricants 2010-04-20 05:55:48

回答

3

那么,你们的关系有什么形式?它们是否在关系数据库中?如果是,只需使用一个SQL JOIN - 数据库管理系统可能会做一个散列连接,但你不必在乎那

如果他们在关系数据库中,为什么不

如果一些奇怪的是不是?约束阻止你使用最好的工具形成对于这项工作,是的,做一个哈希连接就像将每个元组放入一个加入属性的哈希表中,然后迭代一个条目并在另一个条目中查找匹配一样简单。 如果所有的数据都适合主内存,那就是。

+0

只是为了澄清,我会把每个关系放入一个哈希表,每个属性将由连接属性键入。然后遍历每个散列表来寻找匹配? – 2010-04-20 14:43:49

+0

@杰克:阅读维基百科文章。您只需要一个散列表来包含其中一个关系,然后再遍历另一个关系并查找散列表中连接属性的匹配。 – 2010-04-20 15:00:35

0

在这里他的一种方法来做一个哈希连接在Java 最好的是哈希表一个哈希表。

HashMap<Sting, Object[]> hash = new HashMap<String, Object[]>(); 
for (Object[] a : as) { 
    hash.put(a.a1, a); 
} 

然后在B中使用哈希循环并重新组合匹配。

ArrayList joined = new ArrayList(); 
for(Objec[] b : bs){ 
    A a = hash.get(b.b1); 
    joined.add(new Object[]{a, b}); 
} 

只有当A表的每个元素都有唯一的a1时,这才有效。