본문 바로가기
개발일지/임시카테고리

Java - HashSet, ArrayList 및 집합, 합집합, 교집합, 차집합 등 집합개념

by 다니엘의 개발 이야기 2024. 12. 27.
320x100

아래의 내용은 여타 선언과 같은 개념인 것 같다.

그래도 궁금한점이 생겨서 공부할 겸 2가지 적어본다.

 

#1 add 개념

add개념은 주석처리로 적어놓기도 했지만, java는 기본적으로  set1로 선언한 선언문의 경우에

어떤 "집합리스트"가 되는 것 같고,

따라서 1을 3번 add 했을때, 1+1+1이 아닌, 해당 리스트에 1이 없으면 채워넣고, 혹여 1이 이미 들어있다면 새로 들어오는 것은 버리는 개념인 것 같다.


* 전체적으로 작성하면서, HashSet의 유니크 개념이 뭔지 확실히 알고 싶어서 공부해보니깐

HashSet 선언을 하게 되면 해당 리스트에 [] 이렇게 공백일 경우에

바로 위에서 말한 개념 처럼 이미 있으면, 새로 들어오려는 것을 버리고, 만약 없으면, 새로 들어오는 개념의 유니크였다.

 

이와 반대 개념으로써 선언을 하고 add(1);을 3번하게 되면 3번 할때마다 1이 추가 되어서 결국 [1,1,1]이 되는 선언문은

ArrayList이다.


#2 HashSet 개념

이건 구글링 했을때 어이 없게도 이해도 안된 듯한 사전적 정의를 복붙 해놓는 내용이 너무 많아서 1페이지 보고 포기 했다.

구글링은 분명 주제별로 도움이 되는 것도 존재하지만,

그외에는 판에 박힌듯한 사전적 정의가 판친다. 작성자 본인도 이해를 못한 것 같은 느낌이 팍팍 드는..

암튼 그래서 이번엔 chat gpt의 힘을 빌렸다.

 

HashSet을 사용하는 이유 3가지는

1. "중복 데이터 방지"를 하기 위해서
2. 데이터의 순서가 중요하지 않은 경우
3. 빠른 검색과 수정 작업이 필요한 경우

라고 한다.

 

아직 써보진 않았지만, 순서 유지를 위해서는 HashSet 선언 대신에 LinkedHashSet을,

정렬된 상태로 유지를 해야하면  TreeSet을 사용하는 것이 좋다고 하는데

이거는 잘 이해는 안갔다. 추후에 해보면 알것도 같다.


#3 학습코드

import java.util.Arrays;
import java.util.HashSet;

public class Main {
    public static void main(String[] args) {

//        1. 자바에서 집합 사용 - HashSet
        System.out.println("== HashSet");
        HashSet set1 = new HashSet();
        set1.add(1);
        set1.add(1);
        set1.add(1);
//        1이라는 수를 add해주는 것인데, 1+1+1의 개념이 아니라
//        그 집합 안에 1이라는 수가 있도록 채워주는 것이다.
        System.out.println("set1 = " + set1);
        set1.add(2);
        set1.add(3);
        System.out.println("set1 = " + set1);
        set1.remove(1);
        System.out.println("set1 = " + set1);
        System.out.println(set1.size());
//      집합데이터 set1에 2라는 숫자가 들어있는지 확인
        System.out.println(set1.contains(2));


//        2. 집합연산
        System.out.println("== 집합연산 ==");

//        3. 교집합
        HashSet a = new HashSet(Arrays.asList(1,2,3,4,5));
        HashSet b = new HashSet(Arrays.asList(2,4,6,8,10));
//        a에 있는 값을 b와 대조해서 교차되는 모두를 a에 리턴해준다. (교집합)
//        a.retainAll(b);
//        System.out.println("교집합: "+a);

//        3. 합집합
//        a.addAll(b);
//        System.out.println("합집합 : " + a );

//        4. 차집합
            a.removeAll(b);
        System.out.println("차집합 : " + a);
   }
}

 

300x250