Вы можете создавать вложенные карты или использовать пользовательский класс, определяющий hashCode()
.
Как правило, объединять ключи не очень хорошая идея, вы можете столкнуться с коллизиями, как в случае с ключами 1
и 22
и клавиши 12
и 2
.Они будут отображаться на одно и то же значение 122
.
Если вы всегда будете использовать обе клавиши, использование одной Map
всегда будет немного более эффективным, и вы всегда можете определить свой собственный адаптер длякарта, которая будет принимать два аргумента:
public class MyCache {
private Map<MyKey, Object> cache = new HashMap<MyKey, Object>();
public Object getObject(Object key1, Object key2){
return cache.get(new MyKey(key1, key2));
}
public void putObject(Object key1, Object key2, Object value){
cache.put(new MyKey(key1, key2), value);
}
}
Не забудьте определить equals()
и hashCode()
в вашем пользовательском классе ключей (при необходимости добавьте проверки на недействительность).
public int hashCode() {
int result = 17;
result = 37 * result + keyA.hashCode();
result = 37 * result + keyB.hashCode();
return result;
}
public boolean equals(Object another) {
return another.keyA.equals(keyA) && another.keyB.equals(keyB);
}