Hello, Android!

Set 본문

Kotlin

Set

lwndnjs93 2020. 7. 11. 22:50

set은 리스트와 달리 순서가 없는 집합의 형태인 컬렉션이다

리스트는 순서가 있어, 같은 데이터를 중복하여 저장이 가능하지만

set은 순서가 없기때문에 중복 데이터의 저장이 불가능하다

 

- Set

set의 생성은 리스트와 동일하게 setOf함수와 mutableSetOf함수가 존재하며

set은 불변의 set을, mutableSetOf는 가변형 set을 생성한다

set 생성시 제네릭의 타입을 지정하지 않으면, 여러 타입을 혼합하여 저장이 가능하고

타입을 명시하면 해당 타입의 데이터만 저장이 가능하다

 

set은 데이터의 중복이 불가능하다고 하였지만, set1에서는 "Hello"와 "World" 중복되어있다

하지만 실질적으로는 해당 데이터가 중복되어 저장되는것이 아닌, 한번만 저장이 된다

 

- add : 데이터를 추가한다

- remove : 데이터 삭제

- contain : 해당 데이터가 set에 존재하는지 확인하여 있는 경우 true 없으면 false를 반환한다

- containsAll : 컬렉션을 매개변수로 받으며, 매개변수로 넘겨준 컬렉션의 데이터의 요소가

전부 포함되어있는지 확인하여 boolean값을 반환한다

- inEmpty : set이 비어있는지 확인한다

- iterator : 해당 컬렉션의 이터레이터를 생성한다

 

- hashSetOf

hashSetOf는 해시테이블에 데이터를 저장할수 있는 hashSet컬렉션을 만든다

해시테이블은 키와 인덱스를 이용하여 검색, 변경 등을 아주 빠르게 처리가 가능하다

HashSet은 리스트, set과는 다르게 기본적으로 가변성 hashset이기때문에, 추가 삭제가 가능하다

 

- sortedSetOf

sortedSet은 TreeSet 컬렉션을 정렬된 상태로 반환한다

TreeSet은 저장된 데이터의 값에 따라 정렬이 되는데

레드 블랙 트리(RB : Red Black Tree)를 사용한다

이진 탐색 트리는 한쪽으로 치우친 형태를 갖게되는 경우 

트리의 높이만큼 시간이 걸리게 되는 경우가 발생한다

하지만 레트 블랙 트리는 각각의 요소를 빨간색 검은색으로 구분하여

치우침 없이 트리에 요소를 저장한다

HashSet보다는 데이터의 추가, 삭제에 시간이 조금 더 걸리지만

검색, 정렬에 있어서는 뛰어나다는 장점이 있다

 

- linkedSetOf

linkedSetOf는 링크드 리스트(linked list)의 해시테이블에 데이터를 저장한다

앞의 HashSet, TreeSet과 비교하여 속도는 느리지만

링크트 리스트가 포인터를 이용하여 다음 데이터와 연결되기 때문에

메모리를 적게 사용한다는 장점이 있다

'Kotlin' 카테고리의 다른 글

pair, triple  (0) 2020.07.12
Map  (0) 2020.07.12
List  (0) 2020.07.05
문자열  (0) 2020.07.04
배열의 정렬과 필터링  (0) 2020.06.28