WeakReference 是我需要的吗?

Is WeakReference what I need?

我正在开发一个订购系统,这是我的场景:我有一个 class 以 "caching" 策略保存新订单。这时,我使用的是这样一个HashMap:

public static final Map<Long, Order> orders = new HashMap<Long, Order>();

我通过 long 唯一标识一个订单(它不是来自数据库,它只是一个递增的变量)。我不从数据库中保存它的原因是,例如:员工正在注册来自 phone 电话的订单,突然客户不想再订购了,所以我不会填充我的带有无用寄存器的数据库。基于此,我正在寻找一种方法来保存所有订单和 "clean automatically" 不再使用的索引。

我看过 WeakReference 但我不知道那是否是我真正需要的。我愿意接受任何建议。

提前致谢。

您不想要 WeakReferenceWeakReference 用于在内存中缓存大型对象(比如图像)的情况,并且您想要表明如果可用内存变得稀少,垃圾收集器可以删除该图像。在这种情况下,您以后总是可以从磁盘重新加载图像,所以您不关心它是否已从内存中删除。

对于你的情况,我会使用普通的 HashMap。一旦客户确认他们确实想要订单,您就可以将其保存到数据库中。

如果客户不想要该订单,则只需将其从 HashMap 中删除 - 一个非常便宜的操作。

编辑:

您可能也在寻找 "Timed Cache"。类似于 HashMap 的东西,它会在一定时间后自动使任何 key/value 过期。 Google的Guava有这样的数据结构。参见 related SO question