자료구조 - Set (Java)

제훈·2024년 7월 24일

자료구조

목록 보기
4/4

Set - HashSet

간단하게 '집합'이기에 중복 값을 허용하지 않고, 저장 순서도 유지하지 않는 것

-> 순서를 유지하고 싶다면 LinkedHashSet 클래스 사용하기

중복값 허용 X, 순서 보장 X

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

public class Application {
    public static void main(String[] args) {
        Set<String> hashSet = new HashSet<>();

        hashSet.add("java");
        hashSet.add("mariaDB");
        hashSet.add("servlet");
        hashSet.add("spring");
        hashSet.add("html");

        System.out.println("hashSet = " + hashSet); // hashSet = [mariaDB, spring, java, servlet, html]

        hashSet.add(new String("mariaDB")); // 중복값(동등객체)은 Set에 추가되지 않는다.
        hashSet.add(new String("mariaDB1"));

        System.out.println("hashSet = " + hashSet); // hashSet = [mariaDB, spring, java, mariaDB1, servlet, html]
    }
}

데이터 삽입 후 출력을 해보았는데 앞서 말했듯 순서 보장 X, 중복값 허용 X인 것을 알 수 있다.


인덱스 X

인덱스 개념이 없기 때문에 iterator(반복자) 를 사용해야 한다.
위 코드에 아래 추가해서 확인 가능

		Iterator<String> iterator = hashSet.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }


배열로 활용 가능 (권장 X)

        Object[] array = hashSet.toArray();
        for (int i = 0; i < array.length; i++) {
            System.out.println((String)array[i]);
        }

이 개념을 하는 것보다 Iterator를 사용하는 것을 권장한다.


메소드

  1. 객체 선언 - new HashSet<>();
Set<String> hashSet = new HashSet<>();
HashSet<String> hashSet = new HashSet<>();

위와 같이 하면 된다.

  1. 데이터 삽입 - add()
        Set<String> hashSet = new HashSet<>();

        hashSet.add("java");
        hashSet.add("mariaDB");
        hashSet.add("servlet");
        hashSet.add("spring");
  1. 데이터 삭제 - remove()
        Set<String> hashSet = new HashSet<>();

        hashSet.add("java");
        hashSet.add("mariaDB");
        hashSet.add("servlet");
        hashSet.add("spring");
        
        hashSet.remove("java");
  1. 출력은 sout 이용

  2. 값을 포함하는지 true, false로 확인하기 - contains()

        Set<String> hashSet = new HashSet<>();

        hashSet.add("java");
        hashSet.add("mariaDB");
        hashSet.add("servlet");
        hashSet.add("spring");
        
        System.out.println(hashSet.contains("java"));

실행결과

true
  1. Set은 남겨두고 데이터만 없애기 - clear()
        Set<String> hashSet = new HashSet<>();

        hashSet.add("java");
        hashSet.add("mariaDB");
        hashSet.add("servlet");
        hashSet.add("spring");
        
        hashSet.clear();
        System.out.println(hashSet.toString());

실행결과

[]
  1. Set이 비어있는지 아닌지 확인하기 - isEmpty()
        Set<String> hashSet = new HashSet<>();

        hashSet.add("java");
        hashSet.add("mariaDB");
        hashSet.add("servlet");
        hashSet.add("spring");
        
        hashSet.clear();
        System.out.println(hashSet.isEmpty());

실행결과

false
  1. Set 데이터 크기 확인하기 - size()
        Set<String> hashSet = new HashSet<>();

        hashSet.add("java");
        hashSet.add("mariaDB");
        hashSet.add("servlet");
        hashSet.add("spring");
        
        hashSet.clear();
        System.out.println(hashSet.size());

실행결과

4

LinkedHashSet 은 순서를 유지하며 메소드는 똑같다.

profile
백엔드 개발자 꿈나무

0개의 댓글