如何在Java中“加入”哈希表?
我有两个字符串:如何在Java中“加入”哈希表?
A {} 1,2,3,4,5,6 B {} 6,7,8,9,10,11
它不真正的问题是什么数字在字符串中。所以,那么用户会挑加入什么:
一个hashjoin A.a1 = B.b5乙
我觉得我把阿成一个哈希表由A.a1为重点,然后遍历通过B?密钥将是用户想要加入的内容,并且数据将成为字符串中的内容。
你的问题没有多大意义。散列表(或散列表)将数据存储为keys
和values
。你没有提到哪些值应该是关键字,哪些值应该是值。
你确定你想加入哈希表吗?也许你有错误的数据结构?
调查java.util.Set(和java.util.HashSet)。如果您想获得这两个表中的项目,那么它是一组简单的操作,像这样:
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类(你应该做比对的详细描述你的具体情况)
对于一个完整的加盟:
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());
它没有意义加入哈希表本身;因为一个“匹配”值可能存在于两个哈希表中,但可以由两个不同的密钥来引用。同样,在两个不同的哈希表中找到的一个“匹配”键可能不会引用相同的值。
它是一个使用散列的两个关系的等连接 – 2010-04-21 19:35:01
注意这个工作,标准的Java规则适用。您需要检查以确保Keys和Values正确实施“public boolean equals(Object other)”。 – 2010-04-21 20:07:47
什么是你需要一个散列表映射? – 2010-04-21 18:10:16
更具体的你想要做什么样的映射('Hashtable'实现'Map ,?>'接口) – Progman 2010-04-21 18:11:27
对不起,让我澄清一下,我将有两个数字串代表两个关系A和B.我会结束散列通过用户指定的连接属性加入它们。但我不完全确定如何做一个哈希连接,该表是由连接属性创建的关键? – 2010-04-21 18:13:43