Was*_*oui 9 java linked-list arraylist map data-structures
我想创建一个有两个键的地图:
map.put (key1,key2,value1);// Insert into map
map.get(key1,key2); // return value1
Run Code Online (Sandbox Code Playgroud)
我已经调查了multikeyMap,但我不知道我将如何做到这一点
Jon*_*eet 10
听起来你只想要一个由两个值创建的密钥.您可能会发现这两个值无论如何都应该自然地封装到另一个类型中 - 或者您可以创建一个Key2<K1, K2>类型.(这里的命名是允许的Key3,Key4等等.我不鼓励你走得太远.)
对于介于两者之间的东西,您可以在类中创建一个真正需要的私有静态类(如果它只是一个内部实现细节).如果它不是一个自然的封装(例如,它类似于"名称和人口",在这个特定场景之外没有意义)那么它在保留有意义的属性名称方面会很好,但不会公开暴露它.
在任何这些情况下,你会得到一个新的类型与在构造函数初始化,这有助于双方最后两个变量都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.
}
Run Code Online (Sandbox Code Playgroud)
特定于情境的类型会稍微简单一些,因为它们不是通用的 - 特别是这意味着您不需要担心类型参数,并且可以为变量赋予更好的名称.
Jig*_*shi 10
怎么样
class Key{
private final String key1;
private final String key2;
//accessors + hashcode + equals()
}
Run Code Online (Sandbox Code Playgroud)
和
Map<Key, Value> map
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4854 次 |
| 最近记录: |