뭐든 즐기면서 ;)

JAVA SortedSet 정렬 방법 / JAVA SortedSet Comparable 본문

BACK/JAVA

JAVA SortedSet 정렬 방법 / JAVA SortedSet Comparable

Tada.*+ 2022. 6. 28. 15:33
728x90

SortedSet

Set인터페이스를 구현한 클래스 중 하나입니다. 정렬 가능한 Set 클래스라고 생각하시면 됩니다.

Set은 두 가지 특징이 있고, SortedSet과 Comparable 인터페이스를 이용하여 두 특징에 반하는 기능을 수행하게 할 수 있습니다.

  1. 요소의 저장된 순서가 유지되지 않습니다. 출력할 때 요소의 순서가 랜덤으로 출력됩니다.
  2. 같은 요소를 중복 저장하지 않습니다.
    • SortedSet 클래스와 Comparable 인터페이스를 구현하는 클래스 내에서 compareTo를 Override 이용하여 중복 저장 및 정렬이 가능하게 할 수 있습니다.

Comparable 인터페이스를 구현한 클래스

  • compareTo 메소드를 Override해줍니다. return 값에 따라 정렬이 됩니다.
class Number implements Comparable<Number> {
    private final int key;
    private final int value;

    Number(int key, int value) {
        this.key = key;
        this.value = value;
    }

    public int getKey() {
        return this.key;
    }

    public int getValue() {
        return this.value;
    }

    @Override
    public int compareTo(Number o) {
        // 오름 차순 ( 내림차순으로 하고싶을 경우, return 1과 -1위치를 바꿔준다. )
        // return 0;일 경우 중복값인 걸로 인식하여 저장하지 않습니다.
        if(this.key < o.getKey()) {
            return -1;
        } else if (this.key == o.getKey()) {
            return 0;
        } else {
            return 1;
        }
    }

}

SortedSet<E>

  • 요소 저장 후 출력을 통하여 저장된 순서를 확인합니다.
public class SortedSetSample {

    public static void main (String args[]) {
        int[][] numbers = {{80,20},{50,40},{30,10}, {60,10}, {60,11}};
        SortedSet<Number> set = new TreeSet<>();

        for(int[] number: numbers) {
            Number num = new Number(number[0],number[1]);
            //SortedSet에 Number요소 저장
            set.add(num);
        }

        //정렬된 값 확인
        Iterator<Number> iter = set.iterator();

        Number num = null;
        while(iter.hasNext()) {
            num = iter.next();
            System.out.println("key : " + num.getKey() + " value : " + num.getValue());
        }
    }

}

출력 확인

  • key값이 중복되는 60은 저장하지 않은 것을 확인할 수 있습니다.
  • 만약, 값이 같아도 저장하고 싶다면 comparTo 메소드를 수정해 줘야 합니다.

출력 확인


중복값 저장하기

  • return 0;이 아닌 return 1;로 수정합니다.
@Override
public int compareTo(Number o) {
    // 오름 차순 ( 내림차순으로 하고싶을 경우, return 1과 -1위치를 바꿔준다. )
    // return 0;일 경우 중복값인 걸로 인식하여 저장하지 않습니다.
    if(this.key < o.getKey()) {
        return -1;
    } else if (this.key == o.getKey()) {
        return 1; // 기존 배열의 순서대로 저장하기
    } else {
        return 1;
    }
}

출력 확인

  • key값이 60으로 중복되는 것이 있음에도, 기존 배열 순서대로 저장된 것을 볼 수 있습니다.

 

728x90

'BACK > JAVA' 카테고리의 다른 글

Tomcat java version 확인  (0) 2023.05.25
HashMap getOrDefault 함수  (0) 2022.07.05
JAVA Servlet API  (0) 2022.05.03
Java 올림 / Java Math / Java Math ceil  (0) 2022.03.21
JAVA 함수형 인터페이스란  (0) 2021.11.15
Comments