gpt4 book ai didi

java - HashMap复合键-停止每次调用时创建键对象的解决方案

转载 作者:行者123 更新时间:2023-12-02 03:06:27 24 4
gpt4 key购买 nike

为 HashMap 定义复合键时,例如:

public key {
enum a;
enum b;
enum c;

}

在哪里重写 equals 和 hashcode 来比较这些值(a、b、c)?

是否有技术可以存储此键列表,以便可以通过查询三个值来找到它们,而不是每次都创建新键?例如存储 key 列表?或者尝试重复使用 key ?

垃圾收集将会很大,因为这些键将在每次方法调用时生成。

所以我们可以停下来:

public void update(obj) {

Key = new Key(obj.a, obj.b, obj.c)
// assume already in there map or add
Val val = hashmap.get(key)
val.update(obj.newvalues) // do some calculation

return val;
// key will then be lost after get? So lots of Garbage collection?
// if so should it explicitly be set to key = null;
}

最佳答案

没有简单的方法可以按照您的预期做到这一点。可能需要创建一个带有三个键的 Map。

如果程序担心生成一个新的 Key 实例仅用于查询,请考虑使用 Integer 作为 HashMap 的键。但请记住 Integer 也是一个实例。 HashMap 比较并获取值可能会更快。它可能比自定义键实例使用更少的内存。但无助于避免创建“关键”实例(除非 Integer 实例被 JVM 缓存,这是另一个故事。)。

关于使用 Integer 作为键:

如果键是三个枚举,请尝试使用整数作为键并进行数学转换,确保三个枚举的不同组合可以获得不同的整数值。

例如,假设枚举 a、枚举 b 和枚举 c 有 16 个值。可以使用 java bye 运算符来获取表示组合的整数。然后使用 Integer 从 map 中获取值。

希望这有帮助。

关于java - HashMap复合键-停止每次调用时创建键对象的解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41662651/

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