Найти KeyValuePair в Java: решения без повторной реализации

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

В качестве примера, представим реализацию класса Pair для хранения пары ключ-значение в Java:

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; }
}

Пример использования:

Java
Скопировать код
Pair<Integer, String> myPair = new Pair<>(1, "Один");

Доступ к элементам осуществляется следующим образом:

Java
Скопировать код
Integer key = myPair.getKey(); 
String value = myPair.getValue();

Такой подход упрощает работу с парами данных типа ключ-значение и делает код более структурированным.

Кинга Идем в IT: пошаговый план для смены профессии

Готовые решения KeyValuePair в Java

Удобство «из коробки»: java.util.AbstractMap.SimpleEntry

Представляем AbstractMap.SimpleEntry – решение для работы с парами данных:

Java
Скопировать код
Map.Entry<Integer, String> entry = new AbstractMap.SimpleEntry<>(1, "Один");

Специальный гость из JavaFX: javafx.util.Pair

Если вы работаете с JavaFX, вы можете выбрать javafx.util.Pair:

Java
Скопировать код
javafx.util.Pair<Integer, String> javafxPair = new Pair<>(1, "Один");

Неизменная пара: ImmutablePair from Commons Lang

Для создания неизменяемых пар можно использовать ImmutablePair:

Java
Скопировать код
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:

Java
Скопировать код
android.util.Pair<String, String> androidPair = new android.util.Pair<>("ключ", "значение");

Визуализация

KeyValuePair в Java функционируют вместе, как коробка для ключей и соответствующих ей носков:

Markdown
Скопировать код
🗄️: [Key1🔗Sock1, Key2🔗Sock2, Key3🔗Sock3]

Создайте собственный KeyValuePair

Создайте класс KeyValue, реализующий Map.Entry<K, V>, чтобы обеспечить его взаимодействие с другими элементами системы:

Java
Скопировать код
public class KeyValue<K, V> implements Map.Entry<K, V> {
    // ...
}

Это позволит классу KeyValue взаимодействовать с любым кодом, который использует Map.Entry.

Остерегайтесь подводных камней

  • Используйте дженерики для безопасного взаимодействия с Pair.
  • Если требуется стабильность, используйте неизменяемые типы, такие как ImmutablePair.
  • При поддержке большого количества пар Pair или KeyValuePair, убедитесь, что это не ухудшит производительность по сравнению с более простыми структурами данных.

Полезные материалы

  1. Map (Java Platform SE 8) — подробная информация о структуре данных Map в Java.
  2. What is the equivalent of the C++ Pair<L,R> in Java? – Stack Overflow — обсуждение аналогов C++ Pair в Java.
  3. Lesson: Generics (Updated) (The Java™ Tutorials > Learning the Java Language) — уроки по теме использования дженериков в Java.
  4. Pair (Apache Commons Lang 3.14.0 API) — обзор класса Pair от Apache Commons Lang.
  5. [Effective Java, 3rd Edition [Book]](https://www.oreilly.com/library/view/effective-java-3rd/9780134686097/) — рекомендации по работе с коллекциями Java в книге "Effective Java".
  6. AbstractMap.SimpleEntry (Java Platform SE 8) — руководство по использованию SimpleEntry.
  7. Pair (JavaFX 11) — описание использования класса Pair в JavaFX.