Set

말하는 감자·2024년 12월 20일
0

자바 중급

목록 보기
8/21
post-thumbnail

개념

  • Set은 자바 컬렉션 프레임워크의 일부로, 중복되지 않는 요소의 집합을 나타내는 데이터 구조이다

주요 특징

  • 중복제거

    set은 중복된 요소를 허용하지 않는다. 같은 값을 넣으려고 하면 무시당함
  • 순서없음

    Set의 구현체 중 일부는 순서를 보장하지 않는다
    예외) LinkedHashSet과 TreeSet은 순서를 유지한다(입력순서 또는 정렬 순서)
  • 퍼포먼스

    일반적으로 검색,추가,삭제 연산이 O(1)과 O(log n) 의 시간 복잡도

주요 구현체

  • HashSet
    해시 테이블 기반의 구현으로, 중복을 허용하지 않고 순서 없음
    시간 복잡도: O(1)
Set<String> hashSet = new HashSet<>();
hashSet.add("Apple");
hashSet.add("Banana");
hashSet.add("Apple"); // 중복이므로 추가되지 않음
  • LinkedHashSet
    HashSet과 비슷하지만, 순서 유지
Set<String> linkedHashSet = new LinkedHashSet<>();
linkedHashSet.add("Apple");
linkedHashSet.add("Banana");
linkedHashSet.add("Cherry");
  • TreeSet
    순서 유지
    시간복잡도 O(log n)
Set<Integer> treeSet = new TreeSet<>();
treeSet.add(3);
treeSet.add(1);
treeSet.add(2); // 요소가 오름차순으로 정렬됨

주요 메서드

  • add: 요소 추가. 중복된 경우 false 반환
  • remove(Object obj): 요소 제거. 성공하면 true 반환
  • contains(Object obj): 요소가 포함되어 있는지 확인. 있으면 true 반환
  • size(): Set의 크기 반환
  • isEmpty(): 비어있는지 확인
  • clear(): 모든 요소 삭제

Code

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class SetExam {
    public static void main(String[] args) {
        Set<String> set1=new HashSet<>();
        boolean flag1=set1.add("kang");
        boolean flag2=set1.add("kim");
        boolean flag3=set1.add("kang");

        System.out.println(set1.size());    //중복 없이 kang,kim : 2개 출력
        System.out.println(flag2);
        System.out.println(flag3);

        Iterator<String> iterator=set1.iterator();
        while(iterator.hasNext()){ //있으면 true, 없으면 false
            String str=iterator.next(); // 값 가져옴, 하나 꺼내면 자동으로 다음것 참조
            System.out.println(str);
        }
    }
}

Code 실습(1)

import java.util.*;

public class SetExam{
    public static void main(String[] args){
        Set<String> set = new HashSet<String>();
        set.add("a");
        set.add("a");   // 추가되지 않음
        set.add("b");
        
        System.out.println("set의 내용을 출력합니다.");
        for(String str : set){
            System.out.println(str);
        }
    }
}

Code 실습(2)

문제 설명

Iterator iter의 hasNext와 next메소드를 이용해서 set의 내용을 모두 출력해 보세요.

import java.util.*;

public class SetExam{
    public static void main(String[] args){
        Set<String> set = new HashSet<String>();
        set.add("a");
        set.add("b");
        
        Iterator<String> iter = set.iterator();
        while(iter.hasNext()){
            System.out.println(iter.next());
        }
        //iter를 이용해서 set의 내용을 출력하세요.
    }
}

Iterator

  • 요소들을 순회하는 방법을 제공하는 인터페이스
    컬렉션의 내부 구조를 알 필요 없이, 데이터 구조의 요소를 차례로 접근하고 조작 가능
  • 주요 메서드
    hasNext(): 다음 요소가 있으면 true
    next(): 다음 요소 반환, hasNext()로 존재를 확인한 후 호출해야함
    remove(): 마지막으로 반환된 요소 제거
profile
주니어개발자(?)

0개의 댓글