簡體   English   中英

只使用 java 中關鍵對象的引用的緩存(而不是 hashCode 或 equals)

[英]Cache that only uses the reference of the key object in java (and not hashCode or equals)

我有一個類可以多次運行一些昂貴的計算。 我想為它添加一個緩存,例如:

private Map<MyObj, Result> cache = new HashMap<>();

private Result getFoo(MyObj myObj) {
    Result r = cache.get(myObj);
    if (r == null) {
        r = expensiveCalculation(myObj);
    }
    return r;
}

因為我知道兩個 MyObj-s 可以相等的唯一方法是它們是否相同(引用),所以我不希望緩存計算 hashCode() 和 equals()。 有沒有辦法讓 Map 只使用散列參考?

或者像這樣緩存的更好方法?

請注意,這沒有優化。 沒有任何好處,您的代碼會變得更加復雜。

因為我知道兩個 MyObj-s 可以相等的唯一方法是它們是否相同(引用),所以我不希望緩存計算 hashCode() 和 equals()。

始終計算hashCode以在哈希表中進行存儲。 在鍵對象上調用 equals 方法之前,哈希表實現中的一個常見優化是首先檢查相同的引用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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