我有两个字符串:
A {1,2,3,4,5,6} B {6,7,8,9,10,11}
字符串中的数字并不重要。那么用户将选择加入的内容:
一个hashjoin A.a1 = B.b5 B
我想我把A.a1中的A放入哈希表作为键,然后迭代B?键将是用户想要加入的键,数据将在字符串中显示。
答案 0 :(得分:2)
您确定要加入哈希表吗?也许你的数据结构错误了?
查看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的等连接。
哈希表是地图,这意味着它们在一个“域”中有一个元素,可用于在另一个“域”中查找元素。在哈希表中,第一个域是键集,第二个域是值集。把它想象成一堆标签和一堆物品。如果要执行equi-join,它必须像元素一样加入。这意味着它将一个键连接到另一个键,或者它将一个值连接到另一个值。
对于键:
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 :(得分:1)
你的问题没有多大意义。哈希表(或哈希表)将数据存储为keys
和values
。你没有说过哪些值应该是键,哪些值应该是值。