[Java] 기초 - Set

이지연·2025년 12월 15일

개요

아래의 내용은 java_grammer 레파지토리 C01Basic 디렉터리에 저장되어있는 내용을 정리하였다.


Set 특징

Set은 중복을 허용하지 않고 순서 보장을 하지 않는 컬렉션이다.
Hash 테이블 기반으로 O(1) 성능을 제공하며, 중복 제거가 필요한 경우 많이 사용된다

Set<String> mySet = new HashSet<>();
mySet.add("야구");
mySet.add("농구");
mySet.add("야구");  // 중복 무시
mySet.add("축구");
System.out.println(mySet);  // [축구, 야구, 농구]
System.out.println("HashSet contains : " + mySet.contains("야구"));  // true (O(1))

집합 연산 함수

Set은 교집합(retainAll), 합집합(addAll), 차집합(removeAll) 연산을 지원한다

Set<String> s1 = new HashSet<>();
s1.add("java"); s1.add("python"); s1.add("c++");
Set<String> s2 = new HashSet<>();
s2.add("java"); s2.add("html"); s2.add("css");

// retainAll: 교집합 (s1만 변경)
s1.retainAll(s2);
System.out.println("retainAll s1: " + s1);  // [java]

// addAll: 합집합 (s1에 s2 추가)
s1.addAll(s2);
System.out.println("addAll s1: " + s1);  // [java, html, css]

// removeAll: 차집합 (s1에서 s2 제거)
s1.removeAll(s2);
System.out.println("removeAll s1: " + s1);  // []

TreeSet

TreeSet은 자동 오름차순 정렬을 제공하는 Set이다.
Red-Black Tree 기반으로 정렬된 순서 보장

Set<String> mySet2 = new TreeSet<>();
mySet2.add("야구");
mySet2.add("농구");
mySet2.add("야구");  // 중복 무시
mySet2.add("축구");
System.out.println("TreeSet : " + mySet2);  // [농구, 야구, 축구]

LinkedHashSet

LinkedHashSet은 삽입 순서를 보장하는 Set이다.
HashSet + LinkedList 구조로 입력 순서 유지

Set<String> linkedSet = new LinkedHashSet<>();
linkedSet.add("야구");
linkedSet.add("농구");
linkedSet.add("야구");  // 중복 무시
linkedSet.add("축구");
System.out.println("LinkedHashSet : " + linkedSet);  // [야구, 농구, 축구]
profile
Eazy하게

0개의 댓글