티스토리 뷰
1. Set 개요
💡 집합처럼 중복되지 않는 데이터를 저장하는 자료구조.
중복을 허용하지 않는다 → 중복 저장을 허용하지 않는다.
null도 하나의 null만 저장.
Set 에는 크게 TreeSet, HashSet, LinkedHashSet 이 있다.
2. HashSet 개요
2-1. HashSet 이란?
💡 해시 테이블 구조를 이용하여 데이터를 저장하는 구조.
Set의 특징을 가지고 있으며 중복된 값이 저장되지 않는다.
2-2. HashSet 특징
- HashSet은 해시 테이블 구조를 이용한 HashMap을 이용하여 만들어져 있다.
즉, Map의 특성 중 중복 키 값이 있을 수 없다는 특징을 계승한다. - 인덱스가 아닌 키 값을 이용하여 데이터에 저장과 접근을 한다.
- 삽입 삭제가 빈번한 경우 사용할 수 있다.
package com.ohgiraffers.section02.set.run;
import java.util.HashSet;
import java.util.Iterator;
public class Application1 {
public static void main(String[] args) {
/* 수업목표. Set 자료구조의 특성을 이해하고 hashSet을 이용할 수 있다. */
HashSet<String> hset = new HashSet<>();
hset.add(new String("java"));
hset.add(new String("mariaDB"));
hset.add(new String("servlet"));
hset.add(new String("spring"));
hset.add(new String("html"));
/* 설명. Set에 저장된 자료는 넣는 순서를 보장할 수 없다.(다르다.) */
System.out.println("hset = " + hset); // 왜 순서대로 안들어가지? -> Set 이잖아!
/* 설명. 중복값(동등객체)은 Set에 추가되지 않는다.(e,h 오버라이딩 필요) */
/* 설명. 중복 되는 값이 있으면 새로 추가하려는 객체가 튕겨나가는 구조(덮어쓰지 않음) */
hset.add(new String("mariaDB"));
hset.add(new String("mariaDB1"));
System.out.println("hset = " + hset);
/* 설명. Set은 인덱스 개념이 없어 iterator(반복자)를 활용해야 한다. */
Iterator<String> iterator = hset.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
/* 설명. 배열로 바꾸면 배열의 개념으로 활용할 수도 있긴하다.(권장 X) */
Object[] arr = hset.toArray();
for (int i = 0; i < arr.length; i++) {
System.out.println((String)arr[i]);
}
System.out.println("size(): " + hset.size());
hset.clear();
System.out.println("size(): " + hset.size());
System.out.println("isEmpty(): " + hset.isEmpty());
}
}
// 실행 결과
hset = [mariaDB, spring, java, servlet, html]
hset = [mariaDB, spring, java, mariaDB1, servlet, html]
mariaDB
spring
java
mariaDB1
servlet
html
mariaDB
spring
java
mariaDB1
servlet
html
size(): 6
size(): 0
isEmpty(): true
2-3. LinkedHashSet 이란?
💡 HashSet과 동일한 구조를 가지지만 HashSet과는 다르게 데이터를 삽입한 순서대로 출력.
(HashSet은 순서를 관리하지 않는다.)
package com.ohgiraffers.section02.set.run;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Set;
public class Application2 {
public static void main(String[] args) {
/* 수업목표. LinkedHashSet에 대해 이해하고 활용할 수 있다. */
/* 필기.
* LinkedHashSet은 저장 당시의 순서를 유지하는 특성을 가지고 있다.
* (중복 제거 + 순서 유지)
* */
Set<String> lSet = new LinkedHashSet<>();
lSet.add("ramen");
lSet.add("pork");
lSet.add("Kimchi");
lSet.add("friedEgg");
lSet.add("soup");
System.out.println("lSet = " + lSet);
Iterator<String> iter = lSet.iterator();
while (iter.hasNext()) {
System.out.println(iter.next());
}
}
}
// 실행 결과
lSet = [ramen, pork, Kimchi, friedEgg, soup]
ramen
pork
Kimchi
friedEgg
soup
3. TreeSet 개요
3-1. TreeSet 이란?
💡 HashSet과 비슷한 구조를 가지기 때문에 중복 데이터를 저장하지 않고 저장 순서를 유지하지 않는다.
3-2. TreeSet 특징
- TreeSet 클래스는 데이터가 정렬된 상태로 저장되는 이진 검색 트리의 형태로 요소를 저장한다.
- 이진 검색 트리는 데이터를 추가하거나 제거하는 등의 기본 동작 시간이 매우 빠르다.
package com.ohgiraffers.section02.set.run;
import java.util.Set;
import java.util.TreeSet;
public class Application3 {
public static void main(String[] args) {
/* 수업목표. TreeSet에 대해 이해하고 활용할 수 있다. */
/* 설명. Tree 구조를 활용해 중복제거 + 정렬을 해준다. */
Set<String> tSet = new TreeSet<>(); // Tree 구조? 바로 정렬!!
tSet.add("ramen");
tSet.add("pork");
tSet.add("Kimchi"); // 대소문자 구분한다.
tSet.add("friedEgg");
tSet.add("soup");
System.out.println("tSet = " + tSet);
Set<Integer> lotto = new TreeSet<>(); // HashSet이면 정렬은 없다. 중복만 제거
/* 설명. 1부터 45까지 난수를 중복되지 않게 발생시키고 정렬까지 적용 */
while(lotto.size() < 6) { // 로또 알고리즘 직접 구현해보기??
lotto.add((int)(Math.random() * 45) + 1);
}
System.out.println("lotto = " + lotto);
}
}
// 실행 결과
tSet = [Kimchi, friedEgg, pork, ramen, soup]
lotto = [4, 8, 11, 17, 20, 40]
'한화시스템 > 백엔드' 카테고리의 다른 글
[BE] JAVA_ENUM (0) | 2024.07.24 |
---|---|
[BE] JAVA_컬렉션(Collection)_Map (2) | 2024.07.24 |
[BE] JAVA_컬렉션(Collection)_List (1) | 2024.07.23 |
[BE] JAVA_컬렉션(Collection)_개요 (1) | 2024.07.23 |
[BE] JAVA_제네릭스(Generics) (0) | 2024.07.23 |