ハッシュマップ内の不変オブジェクトがなぜ効果的なのか? 質問する

ハッシュマップ内の不変オブジェクトがなぜ効果的なのか? 質問する

そこで私はハッシュマップある時点で、次のように指摘されました。

「不変性により、さまざまなキーのハッシュコードをキャッシュすることも可能になり、全体的な取得プロセスが非常に高速になり、IntegerJava Collection API によって提供される String やさまざまなラッパー クラス (例: ) が非常に優れたHashMapキーであることが示唆されます。」

よく分かりません…なぜでしょうか?

ベストアンサー1

String#hashCode:

private int hash;

...

public int hashCode() {
    int h = hash;
    if (h == 0 && count > 0) {
        int off = offset;
        char val[] = value;
        int len = count;

        for (int i = 0; i < len; i++) {
            h = 31*h + val[off++];
        }
        hash = h;
    }
    return h;
}

の内容はString決して変更されないため、クラスの作成者はハッシュを一度計算した後はそれをキャッシュすることを選択しました。この方法では、同じ値を再計算する時間を無駄にしません。

おすすめ記事