簡體   English   中英

使用元組作為鍵的哈希圖

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM