マップでキーとして使用される一連の値を表すクラスがあります。
このクラスは不変であり、静的ファクトリ パターンを使用して、個別の値のセットごとにシングルトンにしたいと考えています。目標は、同一のオブジェクトが何度も (100 回以上) 作成されるのを防ぎ、equals メソッドを最適化することです。
このクラスの以前のインスタンスをキャッシュして再利用する最良の方法を探しています。最初に頭に浮かぶのは単純なハッシュマップですが、代替手段はありますか?
マップでキーとして使用される一連の値を表すクラスがあります。
このクラスは不変であり、静的ファクトリ パターンを使用して、個別の値のセットごとにシングルトンにしたいと考えています。目標は、同一のオブジェクトが何度も (100 回以上) 作成されるのを防ぎ、equals メソッドを最適化することです。
このクラスの以前のインスタンスをキャッシュして再利用する最良の方法を探しています。最初に頭に浮かぶのは単純なハッシュマップですが、代替手段はありますか?
次の 2 つの状況があります。
enum
EnumMap
ために最適化されています使用パターンによっては、これまでに作成されたすべてのインスタンスではなく、たとえば最後のNインスタンスのみをキャッシュすることを選択できます。re.compile
これは、 Python の正規表現モジュールなどで使用されるアプローチです。Nが十分に小さい場合(たとえば 5)、線形検索を使用した単純な配列でも問題なく動作する可能性があります。
Map
ベース ソリューションの場合、おそらく便利な実装は です。java.util.LinkedHashMap
これにより@Override
、removeEldestEntry
.
このポリシーをより直接的に実装するLRUMap
Apache Commons Collectionsもあります。
enums
MapMaker
、ソフトキーと値などあなたが作ろうとしているものはFlyweight パターンの例のように聞こえるので、それへの参照を探すと、あなたの考えを明確にするのに役立つかもしれません.
それらをある種のマップに格納することは、実際に一般的な実装です。
What do your objects look like? If your objects are fairly simple I think you should consider not caching them - object creation is usually quite fast. I think you should evaluate whether the possibly small performance boost is worth the added complexity and effort of a cache.