仅使用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完全正确!谢谢