자료구조 & 알고리즘

[JAVA/자료구조] HashSet

2023. 6. 9. 14:41
목차
  1. HashSet이란?
  2. HashSet 생성자
  3. Methods
  4. 집합 연산
  5. 교집합
  6. 합집합
  7. 차집합
  8. TreeSet(정렬)

HashSet이란?

HashSet은 Set 인터페이스를 구현한 클래스이며, 기초수학에서 집합과 같은 개념이다.

특이하게 합집합, 차집합, 교집합 등의 연산을 할 수 있다.

List와 차이점은 중복을 허용하지 않는다는 점과, 인덱스(index)로 데이터를 다루지 않는다는 점이 있다.

가장 중요한 것은 역시 중복을 허용하지 않는다는 점인것 같다.


HashSet 생성자

Set 인터페이스를 구현한 클래스이니 Set 형으로 선언해 줄 수 있다.

제네릭을 이용하여 데이터타입을 정의해주는 것이 좋다.

HashSet<Integer> set = new HashSet<>();
Set<String> set = new HashSet<>();

생성할 때 배열을 List로 변환하여 넣어주거나, List를 넣어서 생성할 수도 있다.

Set<Integer> setA = new HashSet<>(Arrays.asList(1,2,3,4,5));

List<Integer> list = new ArrayList<>(Arrays.asList(1,2,3,4,5));
Set<Integer> setB = new HashSet<>(list);

Methods

add, remove, size, contains 등 기본적인 메소드들은 모두 지원한다.

	Set<Integer> set = new HashSet<>();
        set.add(1);
        set.add(2);
        set.add(3);
        System.out.println("set = " + set);//[1, 2, 3]
        set.remove(1);
        System.out.println("set = " + set);//[2, 3]
        System.out.println("set.contains = " + set.contains(2));//true
        System.out.println("set.size = " + set.size());//2
        set.clear();
        System.out.println("set.size after clear = " + set.size());//0

집합 연산

교집합, 합집합, 차집합 집합연산을 지원한다.

 

교집합

setA.retainAll(setB)

setA와 setB의 교집합 결과를 setA에 저장한다. 

//교집합 : retainAll()
        Set<Integer> setA = new HashSet<>(Arrays.asList(1,2,3,4,5));
        Set<Integer> setB = new HashSet<>(Arrays.asList(2,4,6,8,10));
        setA.retainAll(setB);
        System.out.println("교집합 : setA = " + setA); //교집합 : setA = [2, 4]

합집합

setA.addAll(setB)

setA와 setB의 합집합 결과를 setA에 저장한다.

//합집합 : addAll()
        Set<Integer> setC = new HashSet<>(Arrays.asList(1,2,3,4,5));
        Set<Integer> setD = new HashSet<>(Arrays.asList(2,4,6,8,10));
        setC.addAll(setD);
        System.out.println("합집합 : setC = " + setC); //합집합 : setC = [1, 2, 3, 4, 5, 6, 8, 10]

차집합

setA.removeAll(setB)

setA와 setB의 차집합 결과를 setA에 저장한다.

//차집합 : removeAll()
        HashSet<Integer> setE = new HashSet<>(Arrays.asList(1,2,3,4,5));
        HashSet<Integer> setF = new HashSet<>(Arrays.asList(2,4,6,8,10));
        setE.removeAll(setF);
        System.out.println("차집합 : setE = " + setE);//차집합 : setE = [1, 3, 5]

TreeSet(정렬)

TreeSet은 HashSet과 마찬가지로 Set 인터페이스를 구현한 클래스이고, HashSet과 성질이 동일하다.

그러나 TreeSet은 HashSet과 다르게, 이진탐색트리(BinarySearch Tree)의 구조로 되어있어, 데이터를 넣을 때 자동으로 정렬된다.

따라서 TreeSet은 HashSet보다 데이터 추가, 삭제에는 시간이 조금 더 걸리지만 정렬되어 저장된다는 점 때문에 조회가 빠르다. TreeSet은 기본적으로 오름차순 정렬을 지원하지만, 생성자의 매개변수로 Comparator 클래스를 구현하여 넣어주면, 정렬 방법도 설정할 수 있다.

2023.06.18 - [자료구조_알고리즘] - [JAVA/자료구조] TreeSet : 정렬을 지원하는 Set

 

'자료구조 & 알고리즘' 카테고리의 다른 글

[JAVA/자료구조] 힙(Heap), 최소 힙(Min Heap), 최대 힙(Max Heap)  (0) 2023.06.11
[JAVA/자료구조] 그래프(Graph)의 개념, 탐색, 구현  (2) 2023.06.11
[JAVA/자료구조] 트리(Tree), 이진트리(Binary Tree) 란?  (0) 2023.06.08
[JAVA/자료구조] Map / HashMap / Hashtable  (0) 2023.06.06
[JAVA/자료구조] DEQUE 데크 (양방향 큐)  (0) 2023.06.06
  1. HashSet이란?
  2. HashSet 생성자
  3. Methods
  4. 집합 연산
  5. 교집합
  6. 합집합
  7. 차집합
  8. TreeSet(정렬)
'자료구조 & 알고리즘' 카테고리의 다른 글
  • [JAVA/자료구조] 힙(Heap), 최소 힙(Min Heap), 최대 힙(Max Heap)
  • [JAVA/자료구조] 그래프(Graph)의 개념, 탐색, 구현
  • [JAVA/자료구조] 트리(Tree), 이진트리(Binary Tree) 란?
  • [JAVA/자료구조] Map / HashMap / Hashtable
HSRyuuu
HSRyuuu
Web Backend Developer happyhsryu
HSRyuuu
HS_dev_log
HSRyuuu
전체
오늘
어제
  • 전체 글 보기 (235)
    • Java (25)
    • Spring (29)
    • JPA & QueryDSL (13)
    • Database (17)
    • 자료구조 & 알고리즘 (30)
    • DevOps (10)
    • [ Computer Science ] (47)
      • Web & Network (14)
      • 프로그래밍 이론 (11)
      • 운영체제 (3)
      • 데이터베이스 이론 (5)
      • Linux 리눅스 (7)
    • [ Frontend ] (17)
      • Vue.js & Nuxt.js (9)
      • JSP_Thymeleaf (7)
    • [ 기타 ] (47)
      • 오픈소스 라이브러리 (5)
      • 코딩테스트 (13)
      • Trouble Shooting (7)
      • Tech Interview (6)
      • Book Review (9)
      • 끄적끄적... (5)
      • 개인 프로젝트 (2)

블로그 메뉴

  • 홈
  • 태그
  • github

공지사항

  • GitHub
  • 공부한 내용을 정리하고 기록하는 블로그 입니다.

인기 글

태그

  • Database
  • 클린코드
  • mybatis
  • Java
  • 백엔드
  • 개발자
  • Spring
  • web
  • 백준
  • 리눅스
  • 백엔드공부
  • JPA
  • 백엔드스쿨
  • 제로베이스
  • SQL
  • 기술면접
  • TechInterview
  • SpringBoot
  • Nuxt3
  • Redisson
  • Redis
  • Linux
  • vue3
  • springsecurity
  • 트랜잭션
  • MySQL
  • cleancode
  • 자료구조
  • 백엔드기술면접
  • HTTP

최근 댓글

최근 글

hELLO · Designed By 정상우.
HSRyuuu
[JAVA/자료구조] HashSet
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.