-
[Java] 컬렉션 프레임워크 2 (Set, HashSet 중심으로)IT Study/컴퓨터 기초 2023. 3. 28. 13:50728x90
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과 동일하므로, 위의 표와 아래 글의 표를 참고해 주세요!
'IT Study > 컴퓨터 기초' 카테고리의 다른 글
[Java] 컬렉션 프레임워크 4 (Map, HashMap 중심으로) (0) 2023.03.29 [Java] 컬렉션 프레임워크 3 (List, ArrayList 중심으로) (2) 2023.03.28 [Java] 컬렉션 프레임워크 1 (컬렉션 인터페이스) (0) 2023.03.28 [Java] 추상화와 인터페이스 (0) 2023.03.26 [Java] String, StringBuffer, StringBuilder (0) 2023.03.26