gpt4 book ai didi

java - 用两个键映射一个值?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:04:54 24 4
gpt4 key购买 nike

我想创建一个有两个键的 map :

map.put (key1,key2,value1);// Insert into map
map.get(key1,key2); // return value1

我正在研究multikeyMap,但我不知道该怎么做

最佳答案

听起来您只想要一个由两个值创建的键。您可能会发现这两个值无论如何都应该自然地封装到另一种类型中 - 或者您可以创建一个 Key2<K1, K2>类型。 (这里的命名允许 Key3Key4 等。不过我不鼓励你走得太远。)

对于介于两者之间的某些东西,您可以在真正需要的类中创建一个私有(private)静态类(如果它只是一个内部实现细节)。如果它不是自然封装(例如,它类似于“名称和人口”,在这种特定情况下没有意义),那么在保留有意义的属性名称方面会很好,但不会公开它。

在任何这些场景中,您最终都会得到一个带有两个最终变量的新类型,这两个变量在构造函数中初始化,并且对 equals 都有贡献。和 hashCode .例如:

public final class Key2<K1, K2> {
private final K1 part1;
private final K2 part2;

public Key2(K1 part1, K2 part2) {
this.part1 = part1;
this.part2 = part2;
}

@Override public boolean equals(Object other) {
if (!(other instanceof Key2)) {
return false;
}
// Can't find out the type arguments, unfortunately
Key2 rawOther = (Key2) other;
// TODO: Handle nullity
return part1.equals(rawOther.part1) &&
part2.equals(rawOther.part2);
}

@Override public int hashCode() {
// TODO: Handle nullity
int hash = 23;
hash = hash * 31 + part1.hashCode();
hash = hash * 31 + part2.hashCode();
return hash;
}

// TODO: Consider overriding toString and providing accessors.
}

更多特定于情况的类型会稍微简单一些,因为它们不是通用的 - 特别是这意味着您无需担心类型参数,并且可以为变量提供更好的名称。

关于java - 用两个键映射一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10787860/

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