Java에서 쌍 사용

1. 개요

이 빠른 기사에서는 Pair 로 알려진 매우 유용한 프로그래밍 개념에 대해 설명합니다 . 은 간단한 키-값 연결을 처리하는 편리한 방법을 제공하며 메서드에서 두 값을 반환하려는 경우 특히 유용합니다.

의 간단한 구현은 핵심 Java 라이브러리에서 사용할 수 있습니다. 그 외에도 Apache Commons 및 Vavr과 같은 특정 타사 라이브러리는 해당 API에이 기능을 노출했습니다.

2. 핵심 자바 구현

2.1. 클래스

쌍의 클래스는에서 찾을 수 있습니다 javafx.util의 패키지로 제공된다. 이 클래스의 생성자는 두 개의 인수, 키 및 해당 값을 사용합니다.

Pair pair = new Pair(1, "One"); Integer key = pair.getKey(); String value = pair.getValue(); 

이 예 는 쌍 개념을 사용 하는 간단한 정수문자열 매핑을 보여줍니다.

표시된대로 객체 의 키 는 getKey () 메서드를 호출하여 검색하는 반면 값은 getValue () 를 호출하여 검색합니다 .

2.2. AbstractMap.SimpleEntryAbstractMap.SimpleImmutableEntry

SimpleEntryAbstractMap 클래스 내에 중첩 된 클래스로 정의됩니다 . 이 유형의 객체를 생성하기 위해 생성자에 키와 값을 제공 할 수 있습니다.

AbstractMap.SimpleEntry entry = new AbstractMap.SimpleEntry(1, "one"); Integer key = entry.getKey(); String value = entry.getValue();

키와 값은 표준 getter 및 setter 메서드를 통해 액세스 할 수 있습니다.

또한 AbstractMap 클래스에는 불변 쌍을 나타내는 중첩 클래스 인 SimpleImmutableEntry 클래스 도 포함되어 있습니다 .

AbstractMap.SimpleImmutableEntry entry = new AbstractMap.SimpleImmutableEntry(1, "one");

이것은 쌍의 값을 변경할 수 없다는 점을 제외하고는 가변 쌍 클래스와 유사한 방식으로 작동합니다. 그렇게하려고하면 UnsupportedOperationException 이 발생합니다 .

3. 아파치 커먼즈

Apache Commons 라이브러리 에서 org.apache.commons.lang3.tuple 패키지 의 Pair 클래스를 찾을 수 있습니다 . 이것은 추상 클래스이므로 직접 인스턴스화 할 수 없습니다.

여기에서 불변 및 가변 쌍을 나타내는 두 개의 하위 클래스 인 Imm utablePairMutablePair를 찾을 수 있습니다.

두 구현 모두 키 / 값 getter / setter 메서드에 액세스 할 수 있습니다.

ImmutablePair pair = new ImmutablePair(2, "Two"); Integer key = pair.getKey(); String value = pair.getValue();

당연히 ImmutablePair 에서 setValue () 를 호출하려고 하면 UnsupportedOperationException이 발생합니다.

그러나 조작은 변경 가능한 구현에 대해 전적으로 유효합니다.

Pair pair = new MutablePair(3, "Three"); pair.setValue("New Three"); 

4. Vavr

Vavr 라이브러리에서 쌍 기능은 불변의 Tuple2 클래스에 의해 제공됩니다 .

Tuple2 pair = new Tuple2(4, "Four"); Integer key = pair._1(); String value = pair._2(); 

이 구현에서는 생성 후 객체를 수정할 수 없으므로 mutating 메서드는 제공된 변경 사항을 포함하는 새 인스턴스를 반환합니다.

tuplePair = pair.update2("New Four"); 

5. 대안 I – 단순 컨테이너 클래스

사용자 선호도에 따라 또는 앞서 언급 한 라이브러리가없는 경우 쌍 기능에 대한 표준 해결 방법은 원하는 반환 값을 래핑하는 간단한 컨테이너 클래스를 만드는 것입니다.

여기서 가장 큰 장점은 다른 도메인 개체를 나타내는 동일한 클래스를 피하는 데 도움이되는 이름을 제공하는 기능입니다.

public class CustomPair { private String key; private String value; // standard getters and setters }

6. 대안 II – 어레이

또 다른 일반적인 해결 방법은 유사한 결과를 얻기 위해 두 개의 요소가있는 간단한 배열을 사용하는 것입니다.

private Object[] getPair() { // ... return new Object[] {key, value}; }

일반적으로 키는 배열의 인덱스 0에 있고 해당 값은 인덱스 1에 있습니다.

7. 결론

이 자습서에서는 Java 의 개념 과 핵심 Java 및 기타 타사 라이브러리에서 사용할 수있는 다양한 구현에 대해 설명했습니다 .

항상 그렇듯이 GitHub에서이 튜토리얼을 뒷받침하는 코드를 찾을 수 있습니다.