반응형
Set는 정해진 순서가 없는 요소들의 집합을 나타내는 컬렉션입니다. 동일한 요소를 중복해서 가질 수 없습니다.
Map은 요소가 키와 값의 쌍의 형태로 저장됩니다. 키는 중복될 수 없고 유일합니다. 하지만 값은 중복해서 사용할 수 있습니다.
Set 생성하기
불변형 setOf() 함수
val mixedTypesSet = setOf("Hello", 5, "World", 3.14, 'c')
val intSet: Set<Int> = setOf(1,5,5)
println(mixedTypesSet) // [Hello, 5, World, 3.14, c]
println(intSet) // [1, 5]
가변형 mutableSetOf() 함수
val animals = mutableSetOf("Lion","Dog","Cat","Python","Hippo")
println(animals) // [Lion, Dog, Cat, Python, Hippo]
animals.add("Bird")
println(animals) // [Lion, Dog, Cat, Python, Hippo, Bird]
animals.remove("Python")
println(animals) // [Lion, Dog, Cat, Hippo, Bird]
Set의 여러 가지 자료 구조
hashSetOf() 함수
해시 테이블이란 내부적으로 키와 인덱스를 이용해 검색과 변경 등을 매우 빠르게 처리할 수 있는 자료구조입니다.
HashSet는 불변성 선언이 없기 때문에 추가 및 삭제 등의 기능을 수행할 수 있습니다.
HashSet 초기화
val intsHashSet: HashSet<Int> = hashSetOf(6, 3, 4, 7) // 불변성 기능이 없음
intsHashSet.add(5) // 추가
intsHashSet.remove(6) // 삭제
println(intsHashSet) // [3, 4, 5, 7]
sortedSetOf() 함수
자바의 TreeSet 컬렉션을 정렬된 상태로 반환합니다. TreeSet는 저장된 데이터의 값에 따라 정렬되는데, 일종의 개선된 이진 탐색 트리인 레드 블랙 트리 알고리즘을 사용해 자료구조를 구성합니다.
검색과 정렬이 뛰어나다는 장점과 HashSet보다 성능이 좀 떨어지고 데이터를 추가하거나 삭제하는 데 시간이 걸립니다.
TreeSet 초기화
val insSortedSet: TreeSet<Int> = sortedSetOf(4,1,7,2)
insSortedSet.add(6)
insSortedSet.remove(1)
println("insSortedSet = ${insSortedSet}") // insSortedSet = [2, 4, 6, 7]
insSortedSet.clear()
println("insSortedSet = ${insSortedSet}") // insSortedSet = []
linkedSetOf() 함수
자바의 LinkedHashSet 자료형을 반환하는 헬퍼 함수입니다. 자료구조상 다음 데이터를 가리키는 포인터 연결을 통해 메모리 저장 공간을 좀 더 효율적으로 사용할 수 있습니다.
LinkedHashSet 초기화
//Linked list를 이용한 HashSet
val intsLinedHashSet: java.util.LinkedHashSet<Int> = linkedSetOf(35, 21, 76, 26, 75)
intsLinedHashSet.add(6)
intsLinedHashSet.remove(21)
println(intsLinedHashSet) // [35, 76, 26, 75, 6]
intsLinedHashSet.clear()
println(intsLinedHashSet) // []
Map의 활용
불변형 mapOf() 함수
val langMap: Map<Int,String> = mapOf(11 to "Java", 22 to "Kotlin", 33 to "C++")
for((key, value) in langMap){
println("key=$key, value=$value")
// key=11, value=Java
// key=22, value=Kotlin
// key=33, value=C++
}
println("langMap[22] = ${langMap[22]}") // langMap[22] = Kotlin
println("langMap.get(22) = ${langMap.get(22)}") // langMap.get(22) = Kotlin
println("langMap.keys = ${langMap.keys}") // langMap.keys = [11, 22, 33]
Map에서 사용하는 멤버 프로퍼티와 메서드
멤버 | 설명 |
size | Map 컬렉션의 크기를 반환한다. |
keys | Set의 모든 키를 반환한다. |
values | Set의 모든 값을 반환한다. |
isEmpty() | Map이 비어 있는지 확인하고 비어있으면 true를, 아니면 false를 반환한다. |
containsKey(key: K) | 인자에 해당하는 키가 있다면 true를, 없으면 false를 반환한다. |
containsValue(value: V) | 인자에 해당하는 값이 있다면 true를, 없으면 false를 반환한다. |
get(key: K) | 키에 해당하는 값을 반환하며, 없으면 null을 반환한다. |
가변형 mutableMapOf() 함수
val capitalCityMap: MutableMap<String,String> // 선언할 때 키와 값의 자료형을 명시할 수 있음
= mutableMapOf("Korea" to "Seoul", "China" to "Beijing", "Japan" to "Tokyo")
println(capitalCityMap.values) // [Seoul, Beijing, Tokyo]
println(capitalCityMap.keys) // [Korea, China, Japan]
capitalCityMap.put("UK","London") // 요소 추가
capitalCityMap.remove("china") // 요소 삭제
println(capitalCityMap) // {Korea=Seoul, China=Beijing, Japan=Tokyo, UK=London}
MutableMap에서 사용하는 멤버 메소드
멤버 | 설명 |
put(key: K, value: V) | 키와 값의 쌍을 Map에 추가한다. |
remove(key: K) | 키에 해당하는 요소를 Map에서 제거한다. |
putAll(from: Map<out K, V>) | 인자로 주어진 Map 데이터를 갱신하거나 추가한다. |
clear() | 모든 요소를 지운다. |
반응형
'Do it 코틀린 프로그래밍' 카테고리의 다른 글
코틀린 표준함수 (1) (0) | 2020.09.06 |
---|---|
코틀린 시퀀스 (1) | 2020.09.05 |
코틀린 컬렉션(2) - List 활용하기 (0) | 2020.08.24 |
코틀린 컬렉션(1) - 기본 구조 (1) | 2020.08.23 |
코틀린 문자열 (0) | 2020.08.22 |
댓글