ABOUT ME

작은 디테일에 집착하는 개발자

Today
-
Yesterday
-
Total
-
  • [Java] 컬렉션 프레임워크 2 (Set, HashSet 중심으로)
    IT Study/컴퓨터 기초 2023. 3. 28. 13:50
    728x90

     

    1. Set 인터페이스란?

    Set은 중복된 원소를 허용하지 않는 자료구조를 구현하는 데에 사용합니다.

    Set은 수학의 '집합' 개념과 유사합니다.

    수학에서의 집합은 중복되지 않는 원소들의 모임이며, 집합 내 원소들은 순서가 존재하지 않습니다.

    Set도 마찬가지로 중복되는 원소를 허용하지 않고 유일해야 하며, 순서에 상관없이 저장됩니다.

     

    따라서, 집합의 개념을 떠올리며 Set의 메서드에 대해 이해해 봅시다.

     

    2. HashSet 클래스

    HashSet은 Set 인터페이스 중 가장 일반적으로 사용되는 클래스로, 원소의 순서를 보장하지 않습니다.

     

    2-1. HashSet 사용법

    import java.util.HashSet;
    
    public class Main {
    	public static void main(String[] args) {
        	Set<String> set = new HashSet<String>();
            HashSet<String> hashset = new HashSet<String>();
        }
    }

     

    HashSet 클래스를 사용하기 위해서는 해당 클래스를 먼저 import 해야 합니다.

    이후 HashSet 클래스는 생성자를 호출하여 객체를 생성할 수 있는데,

     

    2-1-1. Set 인터페이스의 변수에 HashSet 클래스 객체 생성

    Set<String> set = new HashSet<String>();

     

    이 방법으로 생성된 set 변수는 HashSet 클래스에서 정의한 메서드를 사용할 수 없습니다.

    즉, HashSet 클래스에서 추가된 메서드를 사용하려면 형 변환이 필요합니다.

    그러나 코드의 유연성을 고려할 때에는 유용한 방법입니다.

     

    2-1-2. HashSet 클래스의 변수에 HashSet 클래스 객체 생성

    HashSet<String> hashset = new HashSet<String>();

     

    이 방법으로 생성된 hashset 변수는 HashSet 클래스에서 정의한 메서드를 그대로 사용할 수 있습니다.

    따라서 HashSet 클래스에서 추가된 메서드를 사용하려면 HashSet 클래스의 변수에 객체를 생성하는 것이 좋습니다.

     

    2-2. HashSet 클래스의 메서드

    Collection 인터페이스에 존재하는 메서드를 모두 사용할 수 있습니다.

    그 외 HashSet 클래스에 추가된 메서드는 아래와 같습니다.

    이름 매개변수 기능 반환타입
    clone() - HashSet의 복제한 새로운 HashSet 생성 Object, 복제된 객체
    spliterator() - HashSet의 요소를 분할할 반복자(iterator) 생성 Spliterator<T>
    hashCode() - HashSet의 해시 코드 반환 int, 해시 코드
    toString() - HashSet의 문자열 표현 반환 String

     

    2-2-1. Object clone()

    HashSet<String> set = new HashSet<>();
    set.add("apple");
    set.add("banana");
    set.add("orange");
    
    HashSet<String> clonedSet = (HashSet<String>) set.clone();
    System.out.println(clonedSet); // [orange, banana, apple]

     

    2-2-2. Spliterator <T> spliterator()

    HashSet<String> set = new HashSet<>();
    set.add("apple");
    set.add("banana");
    set.add("orange");
    
    Spliterator<String> spliterator = set.spliterator();
    while (spliterator.tryAdvance(System.out::println)) {}
    // apple
    // orange
    // banana

     

    2-2-3. int hashCode()

    HashSet<String> set = new HashSet<>();
    set.add("apple");
    set.add("banana");
    set.add("orange");
    
    System.out.println(set.hashCode()); // 1879631498

     

    2-2-4. String toString()

    HashSet<String> set = new HashSet<>();
    set.add("apple");
    set.add("banana");
    set.add("orange");
    
    System.out.println(set.toString()); // [orange, banana, apple]

     

    3. TreeSet 클래스

    TreeSet은 이진 검색 트리 구조를 기반으로 한 클래스로, 요소 저장 시 자동으로 정렬되어 순서를 보장합니다.

    TreeSet의 가장 큰 특징은 데이터 삽입 시 자동으로 오름차순으로 정렬된다는 것입니다.

    import java.util.TreeSet;
    
    public class TreeSetExample {
        public static void main(String[] args) {
            TreeSet<Integer> num = new TreeSet<>();
    
            // 데이터 추가
            num.add(5);
            num.add(2);
            num.add(7);
            num.add(1);
    
            // 데이터 출력
            System.out.println("TreeSet: " + num); // [1, 2, 5, 7]
        }
    }

     

    4. LinkedHashSet 클래스

    LinkedHashSet은 HashSet와 거의 동일하지만, 요소의 저장 순서를 유지합니다.

    LinkedHashSet 클래스의 주요 메서드는 HashSet과 동일하므로, 위의 표와 아래 글의 표를 참고해 주세요!

     

    [Java] 컬렉션 프레임워크 1 (컬렉션 인터페이스)

    오늘은 (수업시간에) 컬렉션 프레임워크에 대해 배웠습니다. 자바에서 많이 사용하는 만큼 개념을 정확히 잡고 가야 할 것 같아, 블로그 글로 정리하고자 합니다. 1. 컬렉션 프레임워크란? 다수

    1-three.tistory.com

     

Designed by Tistory.