100세까지 코딩
[자바 공부] 컬렉션(2) Set 본문
Set이란?
- Set은 List와 다르게 중복을 허용하지 않는 데이터 집합
Set 종류
SortedSet | 원소들이 오름차순으로 정렬되어 있는 인터페이스. |
HashSet | 해시 테이블로 구현. 빠른 접근 속도. 순서 보장 X. |
LinkedHashSet | 해시 테이블로 구현. 저장된 순서에 따라 순서가 결정. |
TreeSet | RedBlack 트리로 구현한 SortedSet 클래스. 값에 따라 순서 결정. 데이터 저장하면서 정렬할 때 사용. |
주요 메서드
add() | 요소(데이터) 추가 |
clear() | 모든 요소 제거 |
contains() | 요소 포함 여부 반환 |
isEmpty() | Set이 비어 있는지 여부 반환 |
remove() | 요소 제거 |
size() | Set 요소의 개수 반환 |
iterator() | 검색을 위한 반복자 생성 |
메서드 예시
import java.util.HashSet;
import java.util.Iterator;
public class SetStudy {
public static void main(String[] args) {
HashSet<Integer> set = new HashSet<Integer>();
set.add(1); // 1 추가
set.add(2); // 2 추가
set.add(3); // 3 추가
Iterator<Integer> it = set.iterator(); // 출력
while(it.hasNext()){
System.out.println(it.next());
}
System.out.println("사이즈 : "+ set.size()); // 사이즈 확인
set.remove(1); // 1 삭제
Iterator<Integer> it2 = set.iterator(); // 출력
while(it2.hasNext()){
System.out.println(it2.next());
}
System.out.println(set.contains(2)); // 2 포함하는지 확인
set.clear(); // 전체 삭제
System.out.println(set.isEmpty()); // Set 비어있는지 확인
}
}
결과 :
HashSet 예시
import java.util.HashSet;
import java.util.Iterator;
public class SetStudy {
public static void main(String[] args) {
HashSet<Man> set = new HashSet<Man>();
set.add(new Man("Son",1));
set.add(new Man("Kim",2));
set.add(new Man("Ku",3));
set.add(new Man("No",4));
set.add(new Man("Lee",5));
set.add(new Man("Choi",6));
Iterator<Man> it = set.iterator(); // 출력
while(it.hasNext()){
System.out.print(it.next());
}
}
}
class Man{
String name;
int no;
public Man(String name, int no){
this.name = name;
this.no = no;
}
public String toString() {
return no + " ";
}
}
결과 :
순서를 보장하지 않는다.
HashSet 예시 2
import java.util.HashSet;
import java.util.Iterator;
public class SetStudy {
public static void main(String[] args) {
HashSet<Man> set = new HashSet<Man>();
Man m = new Man("Ku",3);
set.add(m); // 객체 동일
set.add(new Man("son",1));
set.add(new Man("Kim",2));
set.add(new Man("Sim",4));
set.add(new Man("Kim",5)); // 내용 동일
set.add(new Man("Kim",5)); // 내용 동일
set.add(m); // 객체 동일
Iterator<Man> it = set.iterator(); // 출력
while(it.hasNext()){
System.out.print(it.next());
}
}
}
class Man{
String name;
int no;
public Man(String name, int no){
this.name = name;
this.no = no;
}
public String toString() {
return no + " ";
}
}
결과 :
동일한 내용의 객체는 중복으로 들어간다.
하지만, 객체 자체가 같은 것은 이미 존재하여 Set 특성상 추가되지 않는다.
TreeSet 예시
import java.util.Iterator;
import java.util.TreeSet;
public class SetStudy {
public static void main(String[] args) {
TreeSet<Man> set = new TreeSet<Man>();
set.add(new Man("son",1));
set.add(new Man("Kim",2));
set.add(new Man("Ku",3));
set.add(new Man("Sim",4));
set.add(new Man("Kim",5)); // 내용 동일
set.add(new Man("Kim",5)); // 내용 동일
Iterator<Man> it = set.iterator(); // 출력
while(it.hasNext()){
System.out.print(it.next());
}
}
}
class Man implements Comparable{
String name;
int no;
public Man(String name, int no){
this.name = name;
this.no = no;
}
public String toString() {
return no + " ";
}
@Override
public int compareTo(Object o) {
return no - ((Man) o).no;
}
}
결과 :
TreeSet을 사용하면 순서대로 저장되어 순서를 보장한다.
중복된 내용도 필터링된다.
그러나 실행 시간이 많이 걸린다는 단점이 있다.
'JAVA' 카테고리의 다른 글
[자바 공부] 컬렉션(4) Stack & Queue (0) | 2023.09.15 |
---|---|
[자바 공부] 컬렉션(3) List (0) | 2023.09.14 |
[자바 공부] 컬렉션(1) Iterator (0) | 2023.09.12 |
[자바 공부] 제네릭 (0) | 2023.09.10 |
[자바 공부] String 메서드 정리 (0) | 2023.09.08 |