[英]Hashmap using tuple as key
我想做的是創建一個使用元組作為鍵的哈希圖。 到目前為止,我所做的是:
HashMap<String, Integer> seen = new HashMap<String, Integer>();
對於鍵,我使用(X+"#"+Y)
其中X為Y,Y為整數。 因此,當我有兩個整數時,我只需要搜索此字符串。 但是,對於非常大的X和Y,創建大型字符串而不是整數元組會占用大量內存。 如何使用(X, Y)
而不是(X+"#"+Y)
?
您可以創建自己的名為Tuple的類,該類重寫Java的hashCode()函數(我假設Java的默認實現對此無效,因此您必須自己創建),然后可以將其用作Hashmap的鍵: )
編輯:正如很多人已經提到的,我也忘記了覆蓋equals()。 這是包含equals()函數的實現。
這樣的事情應該做:
class Tuple {
public Tuple(int x, int y) {
this.x = x;
this.y = y;
}
@Override
public int hashCode() {
int hash = 17;
hash = 31 * hash + this.x;
hash = 31 * hash + this.y;
return hash;
}
@Override
public boolean equals(Object other) {
if (this == other) return true;
if (other == null) return false;
if (this.getClass() != other.getClass()) return false;
Tuple that = (Tuple) other;
return (this.x == that.x) && (this.y == that.y);
}
private int x;
private int y;
}
盡管如前所述,您可以只使用Java的java.awt.Point :)
您可以編寫自己的pair類,這可能是解決此問題的首選方法,但是javax.util也有自己的Pair類,但是實現非常稀疏,因此我通常避免使用它。
如果確實選擇編寫自己的配對類,則必須重寫Object的哈希碼和equals方法
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.