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