
중복을 허용하지 않는자료구조이다.
해시 테이블을 이용해 데이터를 저장하는 구조로, 중복된 값이 저장되지 않는다.
HashSet은 순서는 관리하지 않는다.
📌 HashSet과 관련된 더 자세한 내용
https://velog.io/@dbwls89173/JAVA-%EC%A4%91%EB%B3%B5%EC%9D%84-%EC%A0%9C%EA%B1%B0%ED%95%98%EB%8A%94-HashSet
LinkedHashSet은 HashSet처럼 중복 데이터를 저장하지 않는 특징이 있다.
다만, LinkedHashSet은 데이터를 삽입한 순서대로 출력된다
📌 LinkedHashSet 선언 및 활용
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Queue;
public class Main {
public static void main(String[] args) {
LinkedHashSet<String> lhset = new LinkedHashSet<>();
lhset.add("java");
lhset.add("mysql");
lhset.add("jdbc");
lhset.add("html");
lhset.add("css");
lhset.add("java");
System.out.println("lhset : " + lhset);
// lhset : [java, mysql, jdbc, html, css]
}
}
TreeSet은 HashSet처럼 중복 데이터를 저장하지 않고 저장 순서를 유지하지 않는 특징이 있다. 다만, 정렬을 수행한다는 특징이 있다.
📌 TreeSet 선언 및 활용
import java.util.Set;
import java.util.TreeSet;
public class Main {
public static void main(String[] args) {
// TreeSet의 default 정렬은 오름차순이다.
TreeSet<String> tset = new TreeSet<>();
tset.add("java");
tset.add("mysql");
tset.add("jdbc");
tset.add("html");
tset.add("css");
tset.add("java");
System.out.println("tset : " + tset);
// tset : [css, html, java, jdbc, mysql]
}
}
그렇다면 Set에 있는 데이터를 가져와서 활용하는 방식은 무엇이 있을까?! 위에서 작성한 hset 데이터를 순회하는 코드를 살펴보자.
// toArray() 메소드를 이용해 배열로 변경한다.
Object[] arr = hset.toArray();
// 배열의 인덱스를 이용해 데이터를 가져온다.
for(int i = 0; i < arr.length; i++) {
System.out.println(i + " : " + arr[i]);
}
Iterator<String> iter = hset.iterator();
while(iter.hasNext()) {
System.out.println(iter.next());
// 순회하면서 제거가 가능하다.
iter.remove();
}
Iterator : 컬렉션에 저장되어 있는 요소를 순회하는 인터페이스
밑에서는 위에서 설명한 모든 메소드를 사용해 요소 값을 판단하고, 가져온 다음에 요소를 삭제하는 것을 구현한 것이다.
hset.iterator();는 Iterator 객체를 반환하는 메서드다.
for(String str : hset) {
System.out.println(str);
}
ConcurrentModificationException이 발생하니 주의해야 한다. | Set 종류 | 중복 허용 | 데이터 순서 |
|---|---|---|
| HashSet | X | 순서가 없음 |
| LinkedHashSet | X | 삽입한 순서 |
| TreeSet | X | 정렬 순서 |