1. Set 이란?
- Set은 순서가 없고, 중복 값을 허용하지 않는 특정한 값을 저장한다.
- 집합이란 의미를 가진다.
2. Set의 특징
- 동일한 값을 중복해서 저장하지 않으므로, 중복된 값들이 필요없는 경우 사용한다.
- 요소들의 순서를 저장하지 않는다. 따라서 인덱스를 사용하여 요소에 접근하는 것이 불가능하다.
- Set 구현 클래스: HashSet, TreeSet, LinkedHashSet 등이 있다.
3. Set의 종류
- HashSet: 해시 테이블을 기반으로 요소들을 저장한다.
순서를 보장하지 않으며, 가장 빠른 검색 시간을 가지고 있다. 하지만 요소들의 순서를 예측할 수 없다.
만약, 순서가 중요한 경우 LinkedHashSet을 사용한다.
import java.util.HashSet;
import java.util.Set;
public class HashSetExample {
public static void main(String[] args) {
// HashSet 객체 생성
Set<String> hashSet = new HashSet<>();
// 데이터 추가
hashSet.add("Apple");
hashSet.add("Banana");
hashSet.add("Orange");
hashSet.add("Grape");
hashSet.add("Apple"); // 중복 데이터는 추가되지 않음
// 데이터 출력
for (String fruit : hashSet) {
System.out.println(fruit);
}
// 데이터 포함 여부 확인
System.out.println("Contains Banana: " + hashSet.contains("Banana"));
// 데이터 삭제
hashSet.remove("Orange");
// 데이터 크기 확인
System.out.println("Number of elements: " + hashSet.size());
// 모든 데이터 제거
hashSet.clear();
// 비어있는지 확인
System.out.println("Is HashSet empty? " + hashSet.isEmpty());
}
}
/* 출력
Apple
Grape
Banana
Orange
Contains Banana: true
Number of elements: 3
Is HashSet empty? true
/*
- TreeSet: 이진 검색 트리를 기반으로 요소들을 저장하는 Set 구현 클래스다.
요소들이 정렬된 상태로 저장되어 검색과 범위 검색 연산이 빠르지만,
삽입과 삭제에는 오버헤드가 발생할 수 있다.
import java.util.Set;
import java.util.TreeSet;
public class TreeSetExample {
public static void main(String[] args) {
// TreeSet 객체 생성
Set<String> treeSet = new TreeSet<>();
// 데이터 추가
treeSet.add("Apple");
treeSet.add("Banana");
treeSet.add("Orange");
treeSet.add("Grape");
treeSet.add("Apple"); // 중복 데이터는 추가되지 않음
// 데이터 출력 (정렬된 순서로 출력)
for (String fruit : treeSet) {
System.out.println(fruit);
}
// 데이터 포함 여부 확인
System.out.println("Contains Banana: " + treeSet.contains("Banana"));
// 데이터 삭제
treeSet.remove("Orange");
// 데이터 개수 확인
System.out.println("Number of elements: " + treeSet.size());
// 모든 데이터 제거
treeSet.clear();
// 비어있는지 확인
System.out.println("Is TreeSet empty? " + treeSet.isEmpty());
}
}
/* 출력
Apple
Banana
Grape
Orange
Contains Banana: true
Number of elements: 3
Is TreeSet empty? true
/*
- LinkedHashSet: 요소들의 순서를 보장하는 Set 구현 클래스다.
HashSet과 유사하지만 내부적으로 연결 리스트를 사용하여 요소들의 순서를 찾을 수 있다.
import java.util.LinkedHashSet;
import java.util.Set;
public class LinkedHashSetExample {
public static void main(String[] args) {
// LinkedHashSet 객체 생성
Set<String> linkedHashSet = new LinkedHashSet<>();
// 데이터 추가
linkedHashSet.add("Apple");
linkedHashSet.add("Banana");
linkedHashSet.add("Orange");
linkedHashSet.add("Grape");
linkedHashSet.add("Apple"); // 중복 데이터는 추가되지 않음
// 데이터 출력 (추가된 순서대로 출력)
for (String fruit : linkedHashSet) {
System.out.println(fruit);
}
// 데이터 포함 여부 확인
System.out.println("Contains Banana: " + linkedHashSet.contains("Banana"));
// 데이터 삭제
linkedHashSet.remove("Orange");
// 데이터 개수 확인
System.out.println("Number of elements: " + linkedHashSet.size());
// 모든 데이터 제거
linkedHashSet.clear();
// 비어있는지 확인
System.out.println("Is LinkedHashSet empty? " + linkedHashSet.isEmpty());
}
}
/* 출력
Apple
Banana
Orange
Grape
Contains Banana: true
Number of elements: 3
Is LinkedHashSet empty? true
*/