Set(집합)은 같은 타입의 서로 다른 값을 중복 없이 저장하고자 할 때 사용하는 자료구조형.
Set은 배열과 굉장히 비슷하지만,
1. 중복값을 허용하지 않고
2. 순서가 없다
는 부분에서 배열과 차이가 있다.
그렇다면 왜 Set은 중복값을 허용하지 않고 순서가 없는가?
그 이유는 Hash연산의 결과값을 이용하여 데이터를 저장하기 때문이다.
입력된 임의의 크기의 데이터를 고정된 크기의 데이터로 매핑하는 함수 또는 알고리즘
이해를 돕기 쉽게 설명하는 방법이 바로 나눗셈의 나머지 값을 구하는 연산인데
[10000,524509,79119491,10776]
의 10을 나눈 나머지로 매핑하여 각각의 값은 아래의 값으로 각각 매핑한다.
[0, 9, 1, 6]
다시 내가 10000을 찾고자 할때 %10 연산을 통해 바로 0을 얻어서 0의 인덱스에 무엇이 저장되어있는지 확인할 수 있다.
이러한 연산은 배열처럼 반복문 돌리며 모든 데이터를 탐색하지 않고도 바로 데이터를 검색을 할 수 있도록 도와준다.
다만 방금 예를 든 % 10의 해시 연산은 아주아주 좋지 못한 해시 연산이다.
왜냐면 10000 도, 10도 결국 다 0으로 매핑되기 때문이다.
이런 경우를 해시충돌 이라고 한다.
hash연산을 사용하므로 배열에 비해 빠른 탐색이 가능하다.
그러므로 집합 연산 역시 빠르게 처리할 수 있으며 중복 값을 제거할 수 있다.
입력된 임의의 크기의 데이터를 고정된 크기의 데이터로 매핑하는 함수 또는 알고리즘
1:1로 데이터를 매핑하기 때문에, 검색 및 데이터를 삽입하는데 있어서 빠르게 처리할 수 있다.
또한 데이터의 유일성을 보장하기 때문에, 데이터 중복 방지하는데 도움이 된다.
Set과 배열의 가장 큰 차이점은 중복값을 허용하지 않는 다는 점인데,
만약 Set이 hash연산을 통해 값을 데이터를 저장하지 않는다면,
매번 새로운 데이터를 삽입할때마다 중복값이 없는지 탐색하고 저장해야 할 것이다.
이것은 Hash연산에 비해 훨씬 더 많은 시간이 소요되며 역시 배열 내 요소를 검색하는데도 더 많은 시간이 걸린다.
이는 즉 메모리 사용량이 늘어날 수 있다.