티스토리 뷰

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
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함