array나 list 처럼 연결 자료구조(collection) 이지만 set은 순서라는 개념이 존재하지 않음
Set은 집합이라는 의미를 가짐
데이터를 비순차적(unordered)으로 저장할 수 있는 순열 자료구조 (collection)
집합의 개념과 같다고 생각
삽입(insertion) 순서대로 저장되지 않음
수정 가능(mutable)
동일한 값을 여러번 삽입 불가능
Fast Lookup이 필요할때 주로 사용
Set이라는 인터페이스를 통해 자바에서는 3가지의 Set이 존재
일반적으로 HashSet, TreeSet, LinkedHashSet 순으로 빠름
Hash 알고리즘을 이용한 HashSet
이진 탐색 트리를 사용하여 오름차순 정렬까지 해주는 TreeSet
Set에 순서를 부여해주는 LinkedHashSet
Array와 달리 set은 요소들을 순차적으로 저장하지 않음
Set에서 요소들이 저장될 때 순서는 아래와 같음
이렇게 set는 저장하고자 하는 값의 해쉬값에 해당하는 bucket에 값을 저장하기 때문에 순서가 없다. 순서가 없기 때문에 indexing도 없습니다.
그리고 해쉬값 기반의 bucket에 저장하기 때문에 중복된 값을 저장할 수 없는것입니다.
해쉬값을 기반으로 저장하기 때문에 look up 이 굉장히 빠릅니다.
순서 보장이 필요없고 중복은 없어야할 때
ex) 이벤트 응모자 목록
해쉬값이 기반이기 때문에 조회속도가 빠른 장점을 사용해 실시간 처리에도 사용 가능
집합 관련 문제
빠른 look up 을 해야 할때
내부적으로 HashMap을 사용하여 값을 저장
값의 중복 허용 X
값이 저장된 순서 보장 X
null 허용