gpt4 book ai didi

java - 如何在 Java 中返回有限数量的缓存实例?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:14:23 25 4
gpt4 key购买 nike

我有一个“配置”类,它成为其他几个类的字段。它指示其他类的某种配置或“能力”以允许或禁止操作。截至目前,配置类包含一组四个独立的 boolean 值,并且可能会保持原样——或者与另一个 boolean 值一起增长——。配置是不可变的:一旦对象被创建,配置就永远不会改变。

public class Configuration {
private final boolean abilityOne;
private final boolean abilityTwo;
private final boolean abilityThree;
private final boolean abilityFour;

public Configuration (final boolean abilityOne, final boolean abilityTwo,
final boolean abilityThree, final boolean abilityFour) {
this.configuration = ((1 * (abilityOne ? 1 : 0)) +
(2 * (abilityTwo ? 1 : 0)) +
(4 * (abilityThree ? 1 : 0)) +
(8 * (abilityFour ? 1 : 0)));
}

public boolean isAbilityOne() {
return((1 & this.configuration) > 0);
}

public boolean isAbilityTwo() {
return((2 & this.configuration) > 0);
}

public boolean isAbilityThree() {
return((4 & this.configuration) > 0);
}

public boolean isAbilityFour() {
return((8 & this.configuration) > 0);
}
}

由于 C/有限的硬件背景,我的下一个实现(尝试减少内存占用)是将 int 用作位图:1 -> 第一个 boolean 值,2-> 第二个, 4 -> 第三,8 -> 第四。这样我存储了一个整数,我需要的 boolean 函数如下:

它工作正常并且内存效率很高。但我的一生都在使用 Java 的同事们不赞成这样做。

不同配置的数量有限( boolean 值的组合),但使用它们的对象数量非常多。为了减少内存消耗,我想到了某种“多单例”、枚举或缓存实例。这就是我现在的位置。什么是最好的?

最佳答案

我认为多模式是最有效的方式:

public class Configuration {

private static Map<Long, Configuration> configurations = new HashMap<>();

private long key;
private long value;

public static Configuration getInstanse(long key, boolean... configs) {
if (configurations.containsKey(key)) {
return configurations.get(key).setConfigs(configs);
}
Configuration configuration = new Configuration(key, configs);
configurations.put(key, configuration);
return configuration;
}

// Max number of configs.length is 64
private Configuration(long key, boolean... configs) {
this.key = key;
setConfigs(configs);
}

private Configuration setConfigs(boolean[] configs) {
this.value = 0L;
boolean config;
for (int i = 0; i < configs.length; i++) {
config = configs[i];
this.value = this.value | (config ? (1L << i) : 0L);
}
}

public long getKey() {
return key;
}

public boolean getConfig(int place) {
return (value & (1L << place)) == (1L << place);
}
}

关于java - 如何在 Java 中返回有限数量的缓存实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38451493/

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