관리 메뉴

100세까지 코딩

[자바 공부] 컬렉션(2) Set 본문

JAVA

[자바 공부] 컬렉션(2) Set

100세까지 코딩 2023. 9. 12. 00:22
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