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