
Set(집합) : 순서에 상관없이 데이터만 저장
동일한 데이터를 중복해서 가질 수 없음
Collection 인터페이스에 정의된 메서드를 제공하며
데이터의 중복만 막게 설계되어 있음
Set의 종류
HashSet
package ex13.SetTest;
import java.util.HashSet;
public class HashSetTest {
public static void main(String[] args) {
HashSet<String> set = new HashSet<String>();
set.add("Milk");
set.add("Bread");
set.add("Butter");
set.add("Cheese");
set.add("Ham");
set.add("Ham");
System.out.println(set);
if (set.contains("Ham")) {
System.out.println("Ham도 포함되어 있음");
}
}
}

: Hash테이블에 원소를 저장
장점 : 성능이 가장 우수
단점 : 원소들의 순서가 일정하지 않음 / 순서의 불명확성
TreeSet
package ex13.SetTest;
import java.util.TreeSet;
public class TreeSetTest {
public static void main(String[] args) {
TreeSet<String> set = new TreeSet<String>();
set.add("Milk");
set.add("Bread");
set.add("Butter");
set.add("Cheese");
set.add("Ham");
set.add("Ham");
System.out.println(set);
if (set.contains("Ham")) {
System.out.println("Ham도 포함되어 있음");
}
}
}

: 레드-블랙-트리에 원소를 저장
값에 따라 순서가 결정
알바펫 순서대로 정렬
단점 : HashSet 보다 느림
LinkedHashSet
package ex13.SetTest;
import java.util.LinkedHashSet;
public class LinkedHashSetTest {
public static void main(String[] args) {
LinkedHashSet<String> set = new LinkedHashSet<String>();
set.add("Milk");
set.add("Bread");
set.add("Butter");
set.add("Cheese");
set.add("Ham");
set.add("Ham");
System.out.println(set);
if (set.contains("Ham")) {
System.out.println("Ham도 포함되어 있음");
}
}
}

: Hash테이블과 LinkedList를 결합한 것
삽입된 순서대로 원소들이 정렬됨
약간의 비용을 들여서 HashSet의 단점 해결
합집합과 교집합
package ex13.SetTest;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
public class SetOperationsTest {
public static void main(String[] args) {
Set<Integer> s1 = new HashSet<>(Arrays.asList(1, 2, 3, 4, 5, 7, 9));
Set<Integer> s2 = new HashSet<>(Arrays.asList(2, 4, 6, 8));
// 합집합
s1.addAll(s2);
System.out.println("합집합의 값은:" + s1);
// 교집합
s1.retainAll(s2);
System.out.println("교집합의 값은:" + s1);
}
}

합집합 : addAll()
교집합 : retainAll()
중복된 단어 검출하기
package ex13;
import java.util.HashSet;
import java.util.Set;
public class FindDupplication {
public static void main(String[] args) {
Set<String> s = new HashSet<>();
String[] sample = {"사과", "사과", "바나나", "토마토"};
for (String a : sample) {
if (!s.add(a)) {
System.out.println("중복된 단어: " + a);
}
}
System.out.println(s.size() + " 중복되지 않은 단어: " + s);
}
}

Share article