아래의 내용은 java_grammer 레파지토리 C01Basic 디렉터리에 저장되어있는 내용을 정리하였다.
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은 자동 오름차순 정렬을 제공하는 Set이다.
Red-Black Tree 기반으로 정렬된 순서 보장
Set<String> mySet2 = new TreeSet<>();
mySet2.add("야구");
mySet2.add("농구");
mySet2.add("야구"); // 중복 무시
mySet2.add("축구");
System.out.println("TreeSet : " + mySet2); // [농구, 야구, 축구]
LinkedHashSet은 삽입 순서를 보장하는 Set이다.
HashSet + LinkedList 구조로 입력 순서 유지
Set<String> linkedSet = new LinkedHashSet<>();
linkedSet.add("야구");
linkedSet.add("농구");
linkedSet.add("야구"); // 중복 무시
linkedSet.add("축구");
System.out.println("LinkedHashSet : " + linkedSet); // [야구, 농구, 축구]