티스토리 뷰

Java+Spring/Java

[Java]Set<E>, HashSet<E>, TreeSet<E>

Vagabund.Gni 2022. 7. 15. 23:02
728x90
반응형

Set<E>

 

Set 인터페이스를 구현할 앞으로의 모든 Set 컬렉션 클래스는 다음과 같은 공통점을 갖는다.

 

  1. 데이터의 순서가 유지되지 않는다.
  2. 데이터의 중복 저장을 허용하지 않는다.

Set 컬렉션에 속하는 클래스는 다음과 같다.

 

  1. HashSet<E>
  2. TreeSet<E>

또한, 위 클래스에서 공통으로 사용할 수 있는 메서드는 다음과 같다.

 

추가로, 앞서 살펴보았던 List 클래스와 마찬가지로 컬렉션 인터페이스의 메서드를 상속받아 사용한다.

 

 


HashSet<E>

 

HashSet 클래스는 Set 클래스 중에 가장 많이 사용되는 클래스이다.

 

Set 인터페이스를 물려받아 데이터의 순서가 유지되지 않고, 중복 저장을 허용하지 않는다.

 

해시 알고리즘(Hash Algorithm)을 사용하여 검색 속도가 매우 빠르다는 장점이 있으며,

 

내부적으로는 HashMap 인스턴스를 이용하여 요소를 저장한다.

 

간단한 예를 살펴보면 다음과 같다.

import java.util.*;

public class HashSetExample {
    public static void main(String[] args) {
    
				// HashSet 생성
        HashSet<String> languages = new HashSet<>();
        
				// HashSet에 객체 추가
        languages.add("Java");
        languages.add("Python");
        languages.add("Javascript");
        languages.add("C++");
        languages.add("Kotlin");
        languages.add("Ruby");
        languages.add("Java"); // 중복

        System.out.println(languages.add("Java"));  // false 반환
        System.out.println(languages.add("Java2")); // true 반환

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

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

    }
}

위 코드를 실제로 작동시켜 보면 입력한 순서와 상관없이 결과가 출력되는 것을 알 수 있다.

 


TreeSet<E>

 

TreeSet 클래스는 이진 탐색 트리 형태로 데이터를 저장한다.

 

이진 탐색 트리란 정렬과 검색에 특화된 자료구조로서, 자세한 사항은 나중에 배운다.

 

TreeSet 역시 Set 인터페이스를 물려받아 데이터의 순서가 유지되지 않고, 중복 저장을 허용하지 않는다.

 

import java.util.TreeSet;

public class TreeSetExample {
    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"));
    }
}

위 코드를 작성시켜보면, HashSet 때와는 다르게 사전 편찬 순에 따라 오름차순으로 정렬된 것을 확인할 수 있다.

 

이는 TreeSet의 기본 정렬 방식이 오름차순이기 때문이다.

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/06   »
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
글 보관함