Мне нужна карта, проиндексированная двумя ключами (карта, в которую вы помещаете И извлекаете значения с помощью двух ключей) в Java. Чтобы быть ясным, я ищу следующее поведение:
map.put(key1, key2, value);
map.get(key1, key2); // returns value
map.get(key2, key1); // returns null
map.get(key1, key1); // returns null
Какой лучший способ сделать это? В частности, следует ли мне использовать:
Map
Map
Other?
(где K1, K2, V - типы первого ключа, второго ключа и значения соответственно)
Логически, ваша Пара (key1, key2) соответствует чему-то , так как это ключ вашей карты. Поэтому вы можете написать свой собственный класс, имеющий K1 и K2 в качестве параметров, и переопределить метод hashCode () (плюс, возможно, другие методы для большего удобства). Очевидно, это «чистый» способ решения вашей проблемы.
Я бы порекомендовал перейти ко второму варианту
Map<Pair<K1,K2>,V>
Первый вызов вызовет больше перегрузки при извлечении данных и даже больше при вставке / удалении данных с карты. Каждый раз, когда вы вводите новое значение V, вам нужно проверять, существует ли карта для K1, если нет, создавать ее и помещать в основную карту, а затем помещать значение с помощью K2.
Если вы хотите иметь интерфейс при экспозиции, сначала оберните Map<Pair<K1,K2>,V>
своей собственной «DoubleKeyMap».
(И не забудьте правильно реализовать методы hash и equals в классе Pair !!)