Найти KeyValuePair в Java: решения без повторной реализации
Быстрый ответ
В качестве примера, представим реализацию класса Pair
для хранения пары ключ-значение в Java:
public class Pair<K, V> {
private K key;
private V value;
public Pair(K key, V value) {
this.key = key;
this.value = value;
}
public K getKey() { return key; }
public V getValue() { return value; }
}
Пример использования:
Pair<Integer, String> myPair = new Pair<>(1, "Один");
Доступ к элементам осуществляется следующим образом:
Integer key = myPair.getKey();
String value = myPair.getValue();
Такой подход упрощает работу с парами данных типа ключ-значение и делает код более структурированным.
Готовые решения KeyValuePair в Java
Удобство «из коробки»: java.util.AbstractMap.SimpleEntry
Представляем AbstractMap.SimpleEntry
– решение для работы с парами данных:
Map.Entry<Integer, String> entry = new AbstractMap.SimpleEntry<>(1, "Один");
Специальный гость из JavaFX: javafx.util.Pair
Если вы работаете с JavaFX, вы можете выбрать javafx.util.Pair
:
javafx.util.Pair<Integer, String> javafxPair = new Pair<>(1, "Один");
Неизменная пара: ImmutablePair from Commons Lang
Для создания неизменяемых пар можно использовать ImmutablePair
:
ImmutablePair<Integer, String> immutablePair = ImmutablePair.of(1, "Один");
Как выбрать подходящий Pair?
Выбор решения зависит от стоящих перед вами задач, как и выбор инструмента для работы.
java.util.AbstractMap.SimpleEntry: выбор в пользу простоты
- В качестве Map.Entry удобно использовать
AbstractMap.SimpleEntry
.
javafx.util.Pair: выбор для JavaFX
javafx.util.Pair
хорошо подойдёт для легковесного хранения пары ключ-значение в JavaFX.
Commons Lang ImmutablePair: выбор в пользу неизменяемости
- Если требуется неизменяемость, выбирайте
ImmutablePair
.
Исключение для Android
Для Android больше всего подойдёт android.util.Pair
:
android.util.Pair<String, String> androidPair = new android.util.Pair<>("ключ", "значение");
Визуализация
KeyValuePair
в Java функционируют вместе, как коробка для ключей и соответствующих ей носков:
🗄️: [Key1🔗Sock1, Key2🔗Sock2, Key3🔗Sock3]
Создайте собственный KeyValuePair
Создайте класс KeyValue
, реализующий Map.Entry<K, V>
, чтобы обеспечить его взаимодействие с другими элементами системы:
public class KeyValue<K, V> implements Map.Entry<K, V> {
// ...
}
Это позволит классу KeyValue
взаимодействовать с любым кодом, который использует Map.Entry
.
Остерегайтесь подводных камней
- Используйте дженерики для безопасного взаимодействия с
Pair
. - Если требуется стабильность, используйте неизменяемые типы, такие как
ImmutablePair
. - При поддержке большого количества пар
Pair
илиKeyValuePair
, убедитесь, что это не ухудшит производительность по сравнению с более простыми структурами данных.
Полезные материалы
- Map (Java Platform SE 8) — подробная информация о структуре данных Map в Java.
- What is the equivalent of the C++ Pair<L,R> in Java? – Stack Overflow — обсуждение аналогов C++ Pair в Java.
- Lesson: Generics (Updated) (The Java™ Tutorials > Learning the Java Language) — уроки по теме использования дженериков в Java.
- Pair (Apache Commons Lang 3.14.0 API) — обзор класса Pair от Apache Commons Lang.
- [Effective Java, 3rd Edition [Book]](https://www.oreilly.com/library/view/effective-java-3rd/9780134686097/) — рекомендации по работе с коллекциями Java в книге "Effective Java".
- AbstractMap.SimpleEntry (Java Platform SE 8) — руководство по использованию SimpleEntry.
- Pair (JavaFX 11) — описание использования класса Pair в JavaFX.