일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 제한함수
- rxjava
- 안드로이드
- Room
- 공격적 프로그래밍
- Android
- git
- Kotlin
- 유닛테스트
- MVVM
- ViewModel
- 자료구조
- dagger2
- UnitTest
- 테스트의 장점
- 안정성
- Observable
- Di
- 디자인패턴
- 단위테스트
- Python
- 코딩테스트
- 깃
- compose
- 파이썬
- 컴포즈
- 코틀린
- mock
- Jetpack
- 안드로이드 디자인패턴
Archives
- Today
- Total
세상을 바꾸는 개발자
셋(Set) 이란? 본문
array나 list 처럼 순열 자료구조 (collection) 이지만 set은 순서라는 개념이 존재하지 않는다.
Set은 집합이라는 의미를 가진다.
Set의 특징
- 데이터를 비순차적(unordered)으로 저장할 수 있는 순열 자료구조 (collection).
- 집합의 개념과 같다고 생각하면 된다.(집합 역시 {1, 9, 6, 4}처럼 중복과 순서가 없다.)
- 삽입(insertion) 순서대로 저장되지 않는다. 즉 특정한 순서를 기대할 수 없는 자료구조.
- 수정 가능하다(mutable).
- 동일한 값을 여러번 삽입 불가능하다. 동일한 값이 여러번 삽입 되면 하나의 값만 저장된다.
- Fast Lookup이 필요할때 주로 쓰인다.
- Set이라는 인터페이스를 통해 자바에서는 3가지의 Set이 있다.
- Hash 알고리즘을 이용한 HashSet
- 이진 탐색 트리를 사용하여 오름차순 정렬까지 해주는 TreeSet
- Set에 순서를 부여해주는 LinkedHashSet
Set의 구조
- Array와 달리 set은 요소들을 순차적으로 저장하지 않습니다.
- Set에서 요소들이 저장될 때 순서는 다음과 같습니다.1. 저장할 요소의 값의 hash 값을 구한다.2. 해쉬값에 해당하는 공간(bucket)에 값을 저장한다.
- 이렇게 set는 저장하고자 하는 값의 해쉬값에 해당하는 bucket에 값을 저장하기 때문에 순서가 없다. 순서가 없기 때문에 indexing도 없다.
- 그리고 해쉬값 기반의 bucket에 저장하기 때문에 중복된 값을 저장할 수 없는것이다.
- 해쉬값을 기반으로 저장하기 때문에 look up 이 굉장히 빠름.1. Look up: 특정 값을 포함하고 있는지를 확인 하는것 ==> 5 in my_set2. O(1): Set의 총 길이와 상관없이 단순히 해쉬값 계산 후 해당 bucket을 확인하면 됨
HashSet
- 내부적으로 HashMap을 사용하여 값을 저장한다.
- 값의 중복을 허용 하지 않는다.
- 값이 저장된 순서를 보장하지 안는다.
- null 을 허용 한다.
해쉬란
hash는 단방향 (one way) 암호화 입니다. 단방향이란 한번 암호화 하면 복호화가 안된다는 뜻입니다. 실제 값의 길이와 상관없이 hash 값을 일정한 길이를 가집니다. 그럼으로 Hash는 주로 임의의 길이를 갖는 임의의 데이터에 대해 고정된 길이의 데이터로 매핑할때 사용됩니다.
언제?
- 중복된 값을 골라내야 할때
- 빠른 look up 을 해야 할때
- 그러면서 순서는 상관 없을때
- 집합 관련 문제
'CS 지식 > 자료구조' 카테고리의 다른 글
트라이(Trie) 란? (0) | 2023.05.15 |
---|---|
맵(Map) 이란? (0) | 2023.05.15 |
자료구조의 주요 사용처 (0) | 2023.05.15 |
리스트(List) 란? (0) | 2023.05.15 |
배열(Array) 란? (0) | 2023.05.15 |
Comments