아래의 내용은 여타 선언과 같은 개념인 것 같다.
그래도 궁금한점이 생겨서 공부할 겸 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);
}
}
'개발일지 > 임시카테고리' 카테고리의 다른 글
java - class 생성 후 반복문 돌리며, 합집합, 차집합, 교집합 (0) | 2024.12.31 |
---|---|
git push, git clone 무반응 증상 해결 완료 (0) | 2024.12.29 |
무언가 빛을 본다는 시간 (0) | 2024.12.27 |
Docker 진행중 현황 리뷰 - with worker_process directive is not allowed here in /etc/nginx/conf.d/nginx.conf:1 (2) | 2024.12.26 |
java 다시 시작 - 첫인상과 그만둔이유, 다시 시작한이유 (1) | 2024.12.11 |