我有兩個字符串:如何在Java中「加入」哈希表?
A {} 1,2,3,4,5,6 B {} 6,7,8,9,10,11
它不真正的問題是什麼數字在字符串中。所以,那麼用戶會挑加入什麼:
一個hashjoin A.a1 = B.b5乙
我覺得我把阿成一個哈希表由A.a1爲重點,然後遍歷通過B?密鑰將是用戶想要加入的內容,並且數據將成爲字符串中的內容。
我有兩個字符串:如何在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