仅使用java中键对象引用的缓存(而不是hashCode或equals)

仅使用java中键对象引用的缓存(而不是hashCode或equals),java,caching,reference,Java,Caching,Reference,我有一个类可以多次运行一些昂贵的计算。我想为它添加一个缓存,如: 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;

我有一个类可以多次运行一些昂贵的计算。我想为它添加一个缓存,如:

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;
}
private Map cache=new HashMap();
私有结果getFoo(MyObj MyObj){
结果r=cache.get(myObj);
if(r==null){
r=费用计算(myObj);
}
返回r;
}
因为我知道两个MyObj-s可以相等的唯一方法是如果它们相同(引用),我不希望缓存计算hashCode()和equals()。有没有一种方法可以让映射只使用散列的引用


还是一种更好的缓存方式?

请注意,这不是优化。没有任何好处,您的代码变得更加复杂

因为我知道两个MyObj-s可以相等的唯一方法是如果它们相同(引用),我不希望缓存计算hashCode()和equals()

始终计算
hashCode
以在哈希表中进行存储。
在对键对象调用equals方法之前,哈希表实现中的一个常见优化是首先检查相同的引用。

请注意,这不是优化。没有任何好处,您的代码变得更加复杂

因为我知道两个MyObj-s可以相等的唯一方法是如果它们相同(引用),我不希望缓存计算hashCode()和equals()

始终计算
hashCode
以在哈希表中进行存储。
在对关键对象调用equals方法之前,哈希表实现中的一个常见优化是首先检查相同的引用。

您的意思是?@ThomasKläger!谢谢你的意思是什么?@ThomasKläger完全正确!谢谢