我有一个表示一组值的类,这些值将用作地图中的键。
这个类是不可变的,我想使用静态工厂模式将它作为每组不同值的单例。目标是防止创建相同的对象多次(100 多次)并优化 equals 方法。
我正在寻找缓存和重用此类以前实例的最佳方法。首先想到的是一个简单的哈希图,但有其他选择吗?
我有一个表示一组值的类,这些值将用作地图中的键。
这个类是不可变的,我想使用静态工厂模式将它作为每组不同值的单例。目标是防止创建相同的对象多次(100 多次)并优化 equals 方法。
我正在寻找缓存和重用此类以前实例的最佳方法。首先想到的是一个简单的哈希图,但有其他选择吗?
有两种情况:
enum
EnumMap
针对它进行了优化根据使用模式,您可以选择仅缓存最后N个实例,而不是到目前为止创建的所有实例。这是re.compile
在 Python 的正则表达式模块中使用的方法。如果N足够小(例如 5),那么带有线性搜索的简单数组也可以正常工作。
对于Map
基于解决方案,也许一个有用的实现是java.util.LinkedHashMap
,如果您@Override
使用removeEldestEntry
.
也有LRUMap
来自Apache Commons Collections的更直接地实施此策略。
enums
MapMaker
,软键和值等你试图做的听起来像是享元模式的一个例子,所以寻找参考可能有助于澄清你的想法。
将它们存储在某种地图中确实是一种常见的实现方式。
你的对象是什么样的?如果您的对象相当简单,我认为您应该考虑不缓存它们 - 对象创建通常非常快。我认为您应该评估可能很小的性能提升是否值得增加缓存的复杂性和努力。