개발일지/Java

Java Set<E>, HashSet, TreeSet

E-room 2022. 9. 17. 17:00
728x90

수학에서의 Set은 집합을 의미하는데 집합은 일반적으로 중복을 허용하지 않는다.

자바 컬렉션에서의 Set은 수학에서의 집합과 유사하다.

 

Set

  • 중복을 허용하지 않는다
  • 저장 순서를 유지하지 않는다

Set 인터페이스에 정의된 메서드들은 다음과 같습니다.

기능 리턴 타입 메서드 설명
객체 추가 boolean add(Object o) 주어진 객체를 추가하고, 성공하면 true를, 중복 객체면 false를 반환합니다.
객체 검색 boolean contains(Object o) 주어진 객체가 Set에 존재하는지 확인합니다.
boolean isEmpty() Set이 비어있는지 확인합니다.
Iterator Iterator() 저장된 객체를 하나씩 읽어오는 반복자를 리턴합니다.
int size() 저장되어 있는 전체 객체의 수를 리턴합니다.
객체 삭제 void clear() Set에 저장되어져 있는 모든 객체를 삭제합니다.
boolean remove(Object o) 주어진 객체를 삭제합니다.

HashSet

Set 인터페이스를 구현한 가장 대표적인 컬렉션 클래스

  • 중복을 허용하지 않는다
  • 저장 순서를 유지하지 않는다
import java.util.*;

public class Main {
    public static void main(String[] args) {

        // HashSet 생성
        HashSet<String> languages = new HashSet<String>();

        // HashSet에 객체 추가
        languages.add("Java");
        languages.add("Python");
        languages.add("Javascript");
        languages.add("C++");
        languages.add("Kotlin");
        languages.add("Ruby");
        languages.add("Java"); // 중복

        // 반복자 생성하여 it에 할당
        Iterator it = languages.iterator();

        // 반복자를 통해 HashSet을 순회하며 각 요소들을 출력
        while (it.hasNext()) {
            System.out.println(it.next());
        }
    }
}

TreeSet

  • 이진 탐색 트리 형태로 데이터를 저장 -> 정렬과 검색에 특화된 자료 구조
  • 중복 저장을 허용하지 않는다
  • 저장 순서를 유지하지 않는다
  • 자동으로 오름차순으로 정렬
import java.util.TreeSet;

public class Main {
    public static void main(String[] args) {

        // TreeSet 생성
        TreeSet<String> workers = new TreeSet<>();

        // TreeSet에 요소 추가
        workers.add("Lee Java");
        workers.add("Park Hacker");
        workers.add("Kim Coding");

        System.out.println(workers);
        System.out.println(workers.first());
        System.out.println(workers.last());
        System.out.println(workers.higher("Lee"));
        System.out.println(workers.subSet("Kim", "Park"));
    }
}

이진 탐색 트리 구조

728x90