我有一个昂贵的计算,我想缓存其结果。有什么方法可以用两个键制作 map ?我在想类似Map<(Thing1, Thing2), Integer>
的东西。
然后我可以检查:
if (! cache.contains(thing1, thing2)) {
return computeResult();
}
else {
return cache.getValue(thing1, thing2);
}
伪代码。但是沿着这些思路。
最佳答案
您需要创建一个包含Thing1和Thing2的类,例如:
class Things {
public final Thing1 thing1;
public final Thing2 thing2;
public Things(Thing1 thing1, Thing2 thing2) {
this.thing1 = thing1;
this.thing2 = thing2;
}
@Override
public boolean equals(Object obj) { ... }
@Override
public int hashCode() { ... };
}
然后使用它:
Things key = new Things(thing1, thing2);
if (!cache.contains(key) {
Integer result = computeResult();
cache.put(key, result);
return result;
} else {
return cache.getValue(key);
}
请注意,您必须实现equals和hashcode才能使此代码正常工作。如果您需要此代码具有线程安全性,请查看ConcurrentHashMap。