[TIL] 240401 - TreeSet + Comparator

황지원·2024년 4월 1일

TIL

목록 보기
13/15

개요 🎯


  • 기존 Set과 다르게 정렬까지 한번에 진행해주는 TreeSet에 대해 확인해 보면서 정렬 방식도 수정하는 작업을 진행해보고자 한다.

인사이트 👀


기본

  • 코드상 리스트를 TreeSet에 넣어 기존 Set 처럼 중복된 데이터는 제거하면서 정렬까지 진행되는 것을 확인할 수 있다.
    List<Integer> scores = List.of(10, 27, 3, 11, 1, 11)        // [10, 27, 3, 11, 1, 11]
    Set<Integer> newScores = new TreeSet<>(scores);
    
    System.out.println(newScores)        // {1, 3, 10, 11, 27}
  • 다만 문자열의 경우, 사전순으로 정렬되기 때문에 원하는 결과가 나오지 않는 경우가 있다.
    List<String> scores = List.of("10번", "27번", "3번", "11번", "1번", "11번")
    Set<String> newScores = new TreeSet<>(scores);
    
    System.out.println(newScores)
    // {"1번", "10번", "11번", "27번", "3번"}
  • 이를 해결하기 위해 Comparator을 도입하여 원하는 순서로 정렬이 이루어질 수 있도록 한다.
    Comparator<String> comparator = (s1, s2) -> {
        Integer idx1 = Integer.parseInt(s1.split("번")[0]);
        Integer idx2 = Integer.parseInt(s2.split("번")[0]);
        return idx1.compareTo(idx2);
    };  // "번"이라는 문자열 기준으로 앞에 있는 숫자로 정렬
    
    List<String> scores = List.of("10번", "27번", "3번", "11번", "1번", "11번")
    Set<String> newScores = new TreeSet<>(comparator);
    answers.addAll(scores);
    
    System.out.println(newScores)
    // {"1번", "3번", "10번", "11번", "27번"}
  • 이와 같이 TreeSet을 통해 Set의 기능과 Sort의 기능을 동시에 사용하여 자료구조를 얻을 수 있다.
profile
함께 도전하고 성장하는 어린 꿀벌, 주니어 개발자 황지원 입니다

0개의 댓글