gpt4 book ai didi

java - 在 Java 中缓存和重用不可变单例对象的最佳方法是什么?

转载 作者:行者123 更新时间:2023-11-29 07:21:37 25 4
gpt4 key购买 nike

我有一个代表一组值的类,这些值将用作 map 中的键。

这个类是不可变的,我想使用静态工厂模式使它成为每个不同值集的单例。目标是防止相同的对象被创建多次 (100+) 并优化 equals 方法。

我正在寻找缓存和重用此类先前实例的最佳方法。首先想到的是一个简单的 HashMap ,但还有其他选择吗?

最佳答案

有两种情况:

  • 如果不同对象的数量很少且固定,您应该使用enum
    • 除了声明的常量之外,它们不可实例化,并且EnumMap针对它进行了优化
  • 否则,您可以按计划缓存不可变实例:
    • 如果值可由连续范围内的数字索引,则可以使用数组
      • 这就是例如Integer在给定范围内为 valueOf
      • 缓存实例
    • 否则你可以使用某种 Map

根据使用模式,您可以选择只缓存,比如说,最后 N 个实例,而不是目前创建的所有实例。这是例如使用的方法。 re.compile在 Python 的正则表达式模块中。如果 N 足够小(例如 5),那么使用线性搜索的简单数组也可以正常工作。

对于基于 Map 的解决方案,可能有用的实现是 java.util.LinkedHashMap ,如果您 @Override removeEldestEntry,它允许您执行类似 LRU 的策略.

还有LRUMap来自 Apache Commons Collections更直接地实现此政策。

另见

相关问题

关于java - 在 Java 中缓存和重用不可变单例对象的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3557620/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com