Мне нужна коллекция, которая может искать значение на основе ключа и наоборот. Для каждого значения есть один ключ, и для каждого ключа есть одно значение. Есть ли готовая к использованию структура данных, которая делает это?Коллекция Java - уникальный ключ и уникальное значение
ответ
BiMap от Google Guava похоже, что он подойдет вам.
Бимап (или «двунаправленная карта») - это карта, которая сохраняет уникальность своих значений, а также ее ключей. Это ограничение позволяет бимакам поддерживать «обратный вид», который является еще одним бимапом, содержащим те же записи, что и этот бимап, но с отмененными ключами и значениями.
Или BidiMap из Apache Commons Collections:
Определяет карту, которая позволяет двунаправленный поиск между ключом и значениями.
Этот расширенный
Map
представляет собой отображение, в котором ключ может искать значение, а значение может искать ключ с одинаковой легкостью. Этот интерфейс расширяетMap
и поэтому может использоваться везде, где требуется карта. Интерфейс обеспечивает обратное отображение карты, обеспечивая полный доступ к обоим направлениямBidiMap
.
Вы можете использовать BiMap от Eclipse Collections (ранее GS Collections).
BiMap
- это карта, которая позволяет пользователям выполнять поиск в обоих направлениях. Оба ключа и значения в BiMap уникальны.
Основная реализация - HashBiMap
.
inverse()
BiMap.inverse()
возвращает представление, где положение ключа типа и типа значения поменяны местами.
MutableBiMap<Integer, String> biMap =
HashBiMap.newWithKeysValues(1, "1", 2, "2", 3, "3");
MutableBiMap<String, Integer> inverse = biMap.inverse();
Assert.assertEquals("1", biMap.get(1));
Assert.assertEquals(1, inverse.get("1"));
Assert.assertTrue(inverse.containsKey("3"));
Assert.assertEquals(2, inverse.put("2", 4));
put()
MutableBiMap.put()
ведет себя как Map.put()
на регулярной карте, за исключением того, что броски, когда добавляется повторяющееся значение.
MutableBiMap<Integer, String> biMap = HashBiMap.newMap();
biMap.put(1, "1"); // behaves like a regular put()
biMap.put(1, "1"); // no effect
biMap.put(2, "1"); // throws IllegalArgumentException
forcePut()
Это ведет себя как MutableBiMap.put()
, но он молча удаляет запись на карту с тем же значением, прежде чем положить пару ключ-значение в карте.
MutableBiMap<Integer, String> biMap = HashBiMap.newMap();
biMap.forcePut(1, "1"); // behaves like a regular put()
biMap.forcePut(1, "1"); // no effect
biMap.put(1, "2"); // replaces the [1,"1"] pair with [1, "2"]
biMap.forcePut(2, "2"); // removes the [1, "2"] pair before putting
Assert.assertFalse(biMap.containsKey(1));
Assert.assertEquals(HashBiMap.newWithKeysValues(2, "2"), biMap);
Примечание: Я коммиттер для Eclipse, коллекций.
Принятый ответ упоминает BiMap
, но он стал more up-to-date с библиотеками Гуавы.
BiMap<K, V>
являетсяMap<K, V>
, что
- позволяет просматривать "обратный"
BiMap<V, K>
сinverse()
- гарантирует, что значения являются уникальными, что делает
values()
Set
Итак, вы можете получить код вроде этого:
Некоторых предостережения с этим объектом:
- Вы не сможете добавить неуникальное значение, или вы получите
IllegalArgumentException
. Вы можете использоватьforcePut(key, value)
, но это будет override the existing key-value pair.
- 1. сервера SQL: Уникальное ограничение создает уникальный ключ и уникальный индекс
- 2. Уникальный ключ с условным
- 3. уникальная коллекция ключ-значение пары
- 4. Создать уникальный ключ в Java
- 5. MySQL уникальный ключ сценарий
- 6. Как сгенерировать уникальный ключ api и секретный ключ в java
- 7. Android Facebook Войти уникальный ключ
- 8. Уникальное значение столбца на первичный ключ
- 9. падения уникальный ключ и генерировать новый уникальный ключ
- 10. Коллекция Java и MapKey
- 11. Java Переберите каждое уникальное значение
- 12. упорядоченная коллекция с дублированным значением (ключ, значение)
- 13. Уникальный индекс или уникальный ключ?
- 14. Отфильтровать уникальное значение за ключ в angularjs и получить проверку
- 15. Уникальный ключ с пустым значением
- 16. Столбец принимает только уникальное значение, но уникальный столбец или первичный ключ не связаны с этим столбцом?
- 17. MySQL уникальный ключ и индекс
- 18. SQL. Уникальный и первичный ключ
- 19. кластеризация фактор и уникальный ключ
- 20. Mongodb уникальное значение
- 21. Уникальный ключ от Android
- 22. Уникальный индекс - уникальное значение в col1 ИЛИ col2
- 23. Уникальное значение сеанса
- 24. Добавить только уникальное значение
- 25. Couchdb - как установить поле, содержащее уникальный ключ
- 26. Уникальный ключ, необходимый для каждого searchId
- 27. Java & MySQL - уникальный ключ не работает?
- 28. Уникальное значение Mysql или пустая строка
- 29. String индексированная коллекция в Java
- 30. ключ = «значение» и ключ = «значение» Строка разбора в Java