Java 에서 Pair 사용하기

Java에서 Pair 자료형을 사용하는 몇가지 방법을 정리해봅니다.

라이브라리, 직접 클래스를 만들기


JavaFx 의 Pair

기본 라이브러리가 아니다.

  • 링크 에 가면 사용법을 알 수 있으나, 별로 사용을 권장 하진 않는다.
  • 나도 안쓸꺼야 있는걸로만 알고 끝!

SimpleEntry

AbstractMap 안에 있는걸 쓴다.

1
2
3
AbstractMap.SimpleEntry pair1 = new AbstractMap.SimpleEntry<Integer, Integer>(1, 2);
pair1.getKey();
pair1.getValue();
  • 선언과 동시에 반드시 초기화를 해주어야 한다.
  • 근데 생각보다 불편한것 같다. 굉장히 길어지는거 같고.
  • getKey(), getValue() 메소드를 통해서 값을 가져올 수 있다.

직접 Pair를 만든다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Pair {
    private int x;
    private int y;

    Pair(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public int getX(){
        return x;
    }

    public int getY(){
        return y;
    }
}
  • 보이는 그대로 그냥 새로운 클래스를 만든다.
  • 변수명도 내가 정할 수 있다.
  • c++에서 tuple을 안쓰고 struct로 관리하던 느낌으로 쓰면 될것 같다.

전체소스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import java.util.AbstractMap;

class Practice {
    public static void main(String[] args) {
        AbstractMap.SimpleEntry pair1 = new AbstractMap.SimpleEntry<Integer, Integer>(1, 2);
        System.out.println(pair1.getKey() + " " + pair1.getValue());

        Pair pair2 = new Pair(3,4);
        System.out.println(pair2.getX() + " " + pair2.getY());
    }
}

class Pair {
    private int x;
    private int y;

    public Pair(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public int getX(){
        return x;
    }

    public int getY(){
        return y;
    }
}
1
2
1 2
3 4

대소 연산이 필요한경우

Comparable 이나 Comparator 인터페이스를 구현해준다.

1
2
3
4
5
6
7
8
9
10
11
12
13
class Pair implements Comparable<Pair> {

    private int x;
    private int y;

    // ... 생성자 등등

    @Override
    public int compareTo(final Pair o) {
        if (x == o.x) return Integer.compare(y, o.y);
        return Integer.compare(x, o.x);
    }
}

전체소스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package boj;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Pair> list = Arrays.asList(new Pair(2, 10), new Pair(1, 20), new Pair(1, 10));
        System.out.println("정렬전");
        printList(list);

        System.out.println("정렬후");
        Collections.sort(list);
        printList(list);
    }

    private static void printList(final List<Pair> list) {
        for (Pair pair : list) {
            System.out.print("x = " + pair.getX() + " " + "y = " + pair.getY());
            System.out.println();
        }
    }
}

class Pair implements Comparable<Pair> {

    private int x;
    private int y;

    public Pair(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public int getX() {
        return x;
    }

    public int getY() {
        return y;
    }

    @Override
    public int compareTo(final Pair o) {
        if (x == o.x) return Integer.compare(y, o.y);
        return Integer.compare(x, o.x);
    }
}
1
2
3
4
5
6
7
8
정렬전
x = 2 y = 10
x = 1 y = 20
x = 1 y = 10
정렬후
x = 1 y = 10
x = 1 y = 20
x = 2 y = 10

Reference

  • https://docs.oracle.com/javase/8/javafx/api/javafx/util/Pair.html
  • https://ramees.tistory.com/56