Как «присоединиться» к Hashtables в Java? - PullRequest
0 голосов
/ 21 апреля 2010

У меня есть две строки:

A {1,2,3,4,5,6} B {6,7,8,9,10,11}

это не такдействительно важно, какие цифры в строках.Итак, пользователь выберет, что присоединиться:

A hashjoin A.a1 = B.b5 B

Я думаю, что я поместил A в хеш-таблицу A.a1 какключ, а затем перебрать B?Ключи будут теми, к которым пользователь затем присоединится, а данные будут в строках.

Ответы [ 2 ]

2 голосов
/ 21 апреля 2010

Вы уверены, что пытаетесь присоединиться к хеш-таблицам? Возможно, у вас неправильная структура данных?

Посмотрите на java.util.Set (и java.util.HashSet). Если вы хотите, чтобы элементы были в обеих таблицах, тогда это простая операция Set, например:

Collection A = new ...
...fill the A up...
Collection B = new ...
...fill the B up...
Set join = new HashSet();
join.addAll(A);
join.retainAll(B);

Если вы имеете в виду нечто более похожее на соединение таблиц SQL, то вывод будет зависеть от того, какой тип соединения вы хотите выполнить, и что означает знак равенства в этом случае. Обратите внимание, что вам придется написать класс Pair (который вы должны сделать более информативным, чем Pair для вашего конкретного случая)

Для полного объединения:

ArrayList pairs = new ArrayList();
for (Number numberA : A) {
  for (Number numberB : B) {
    pairs.add(new Pair(numberA, numberB));
  }
}

Для полного объединения с предложением where:

ArrayList pairs = new ArrayList();
for (Number numberA : A) {
  for (Number numberB : B) {
    if (check the condition of the where clause here) {
      pairs.add(new Pair(numberA, numberB));
    }
  }
}

Это примерно такой же хороший ответ, который можно дать в данных обстоятельствах, поскольку ваш вопрос не очень конкретен. Если эти общие ответы не помогут вам, вам потребуется более подробно объяснить свой вопрос, чтобы получить более подробный ответ.

--- Сначала отредактируйте, после некоторого уточнения ---

Хорошо, значит, это равнозначное SQL-уравнению.

Хеш-таблицы - это Карты, что означает, что они содержат элемент в одном «домене», который можно использовать для поиска элемента в другом «домене». В хэш-таблице первый домен - это набор ключей, а второй домен - это набор значений. Думайте об этом как о куче ярлыков и куче предметов. Если должно быть выполнено равное объединение, оно должно объединять подобные элементы. Это означает, что он либо присоединит один ключ к другому ключу, либо присоединит одно значение к другому.

Для ключей:

Hashtable A = ...
Hashtable B = ...

Set keyJoin = new HashSet();
keyJoin.addAll(A.keySet());
keyJoin.retainAll(B.keySet());

Для значений:

Hashtable A = ...
Hashtable B = ...

Set valueJoin = new HashSet();
valueJoin.addAll(A.values());
valueJoin.retainAll(B.values());

Нет смысла присоединяться к самим хеш-таблицам; потому что одно «совпадающее» значение может находиться в обеих хеш-таблицах, но на него могут ссылаться два разных ключа. Аналогично, один «совпадающий» ключ, найденный в двух разных хеш-таблицах, может не ссылаться на одно и то же значение.

1 голос
/ 21 апреля 2010

Ваш вопрос не имеет особого смысла.Хеш-таблица (или hashmap) хранит данные как keys и values.Вы ничего не сказали о том, какие из этих значений должны быть ключами, а какие - значениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...