Карта с двумерным ключом в java

Мне нужна карта, проиндексированная двумя ключами (карта, в которую вы помещаете И извлекаете значения с помощью двух ключей) в 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 , ​​V>

  • Other?

(где K1, K2, V - типы первого ключа, второго ключа и значения соответственно)

23
задан EclipseQuestion 16 June 2011 в 14:21
поделиться

2 ответа

Логически, ваша Пара (key1, key2) соответствует чему-то , так как это ключ вашей карты. Поэтому вы можете написать свой собственный класс, имеющий K1 и K2 в качестве параметров, и переопределить метод hashCode () (плюс, возможно, другие методы для большего удобства). Очевидно, это «чистый» способ решения вашей проблемы.

1
ответ дан 29 November 2019 в 01:20
поделиться

Я бы порекомендовал перейти ко второму варианту

Map<Pair<K1,K2>,V>

Первый вызов вызовет больше перегрузки при извлечении данных и даже больше при вставке / удалении данных с карты. Каждый раз, когда вы вводите новое значение V, вам нужно проверять, существует ли карта для K1, если нет, создавать ее и помещать в основную карту, а затем помещать значение с помощью K2.

Если вы хотите иметь интерфейс при экспозиции, сначала оберните Map<Pair<K1,K2>,V> своей собственной «DoubleKeyMap».

(И не забудьте правильно реализовать методы hash и equals в классе Pair !!)

2
ответ дан 29 November 2019 в 01:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: