[JAVA] TreeSet

캐떠린·2023년 8월 15일
post-thumbnail

⚠️Warning
본 포스트는 당일 학원에서 배운 내용을 복습하는 목적의 공부 기록 시리즈입니다. 정보 전달의 목적이 아님을 유의해주세요! 잘못된 내용에 대한 피드백을 환영합니다:)


❓ TreeSet이란?

: 이진 검색 트리(binary search tree)라는 자료구조의 형태로 데이터를 저장하는 컬렉션 클래스.
중복된 데이터의 저장을 허용하지 않으며 정렬된 위치에 저장하므로 저장순서를 유지하지 않음.

TreeSet

  • Tree 구조 > 이진 트리 구조(이진 탐색 트리, Binary Search Tree)
  • Set 사용법

Set

  • 순서가 없다.
  • 중복값을 가지지 않는다.

TreeSet


HashSet vs TreeSet

HashSet<Integer> set1 = new HashSet<Integer>();

TreeSet<Integer> set2 = new TreeSet<Integer>();

  • 추가하기
    HashSet<Integer> set1 = new HashSet<Integer>();
    TreeSet<Integer> set2 = new TreeSet<Integer>();
    
    //HashSet > add
    set1.add(10);
    set1.add(30);
    set1.add(40);
    set1.add(20);
    set1.add(50);
    
    //TreeSet > add
    set2.add(10);
    set2.add(30);
    set2.add(40);
    set2.add(20);
    set2.add(50);
    
    //HashSet 출력 > HashSet본인만의 순서로 정렬
    System.out.println(set1); //[50, 20, 40, 10, 30]
    
    //TreeSet 출력 > 오름차순
    System.out.println(set2); //[10, 20, 30, 40, 50]
  • 그럼 HashSet은 어떻게 정렬할까?
    → ArrayList로 복사 후 Collections.sort(list)로 정렬
     HashSet<Integer> set3 = new HashSet<Integer>();
     
     set3.add(20);
     set3.add(50);
     set3.add(30);
     set3.add(10);
     set3.add(40);
     
     //정렬 작업 전
     System.out.println(set3); //[50, 20, 40, 10, 30]
     
     //ArrayList 생성하여 HashSet을 ArrayList로 복사
     ArrayList<Integer> list = new ArrayList<Integer>(set3);
     //ArrayList sort 활용하여 정렬
     Collections.sort(list);
     
     //정렬 작업 후 출력
     System.out.println(list); //[10, 20, 30, 40, 50]

TreeSet 탐색

  • 향상된 for문
    for (int n : set2) {
    	System.out.println(n);
    }
    //10 20 30 40 50
  • iterator
    Iterator<Integer> iter = set2.iterator();
    
    while (iter.hasNext()) {
    	System.out.println(iter.next());
    }
    //10 20 30 40 50
  • TreeSet 고유 기능
    • 시작, 끝 요소 뽑아내기 .first() .last()
      System.out.println(set2.first()); //10
       System.out.println(set2.last()); //50
          
    • 기준값을 넣어주면 조건에 해당하는 값 출력하기
      → TreeSet은 정렬이 되어있기 때문에 가능한 기능!
      .headSet(30) .tailSet(30) .subSet(20,40)
          //exclusive(30 미포함)
          System.out.println(set2.headSet(30)); //[10, 20]
          
          //inclusive(30 포함)
          System.out.println(set2.tailSet(30)); //[30, 40, 50]
          
          //첫번째 값 포함, 두번째 값 미포함 범위내 있는 데이터
          System.out.println(set2.subSet(20, 40)); //[20, 30]
profile
개발자 꿈나무의 모든 공부 기록

0개의 댓글