2010-04-20 5 views
2

У меня есть два отношения A и B, как со всеми целыми атрибутами (A {a1, a2, a3, ...} B {b1, b2, b3, ...}. Как бы я hash- присоединиться к этим двум в java? Пользователь будет выбирать два атрибута соединения. Я могу сделать два хеш-таблицы, а затем приступить к их объединению?Hash join in java

+2

http://en.wikipedia.org/wiki/Hash_join – polygenelubricants

ответ

3

Ну, в какой форме ваши отношения имеют? Имеют ли они реляционную базу данных? просто использовать SQL JOIN - СУБД, вероятно, сделать хеширования, но вы не должны заботиться о том, что

Если они не в реляционной базе данных, поэтому не

Если какая-то странная.? ограничение препятствует формированию с помощью лучшего инструмента для задания тогда да, хэш-соединение так же просто, как положить каждый кортеж в хэш-таблицу с ключом атрибута join, а затем повторить записи одного и поиска совпадений в другом. Если все ваши данные вписываются в основную память.

+0

Просто, чтобы уточнить, я бы поставил каждое отношение в хэш-таблицу, и каждый атрибут был бы привязан атрибутом join. Затем перебирайте каждую хэш-таблицу в поисках спичек? –

+0

@Jack: прочитайте статью в Википедии. Вам нужна только одна хэш-таблица, которая содержит одно из отношений, затем переходите через другое отношение и ищите совпадения с атрибутом join в хэш-таблице. –

0

Здесь его способ сделать хеш-соединение в Java Лучше всего сделать хэш одной таблицы A с хэшмапом.

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.