출처: https://www.boostcourse.org/mo234/lecture/154316?isDesc=false
setOf()
, 가변형은 mutableSetOf()
함수로 생성 package chap05.section2
fun main() {
val mixedTypeSet = setOf("Hello", 5, "world", 3.14, 'c')
val intSet: Set<Int> = setOf<Int>(1, 4, 5, 5, 5)
println(mixedTypeSet)
println(intSet) // 중복된 요소 중에 하나만 출력
}
[Hello, 5, world, 3.14, c]
[1, 4, 5]
package chap05.section2
fun main() {
val animals = mutableSetOf("Lion", "Dog", "Cat", "Python", "Hippo")
animals.add("Dog") // 이미 존재하므로 변화 없음.
println(animals)
animals.remove("Python")
println(animals)
}
[Lion, Dog, Cat, Python, Hippo]
[Lion, Dog, Cat, Hippo]
hashSetOf()
함수로 Set을 생성하면, 해시 테이블에 요소를 저장할 수 있는 자바의 HashSet을 반환한다. package chap05.section2
fun main() {
val intHashSet: HashSet<Int> = hashSetOf(6, 3, 4, 7)
println(intHashSet)
intHashSet.add(8)
intHashSet.remove(4)
println(intHashSet)
}
[3, 4, 6, 7]
[8, 3, 6, 7]
cf) 해시 자료구조: 해시 함수를 이용해 특정 키에 대응하는 값을 평균 O(1)의 시간복잡도로 찾을 수 있는 자료구조 (해시 충돌이 발생하는 최악의 경우 O(N)까지 시간복잡도가 늘어날 수 있음.)
sortedSetOf()
함수로 Set을 생성하면, 자바의 TreeSet을 정렬된 상태로 반환한다. 이진 탐색 트리는 평균 O(logN)의 시간복잡도를 보장하지만, 트리가 한쪽으로 편향되는 경우 높이가 N에 가깝기 때문에 O(N)까지 시간복잡도가 늘어날 수 있다.
레드-블랙 트리는 노드를 Red와 Black 색상으로 구분하여, 최악의 경우에도 O(logN) 시간복잡도를 보장해주는 자가 균형 트리 중에 하나다.
package chap05.section2
import java.util.*
fun main() {
val intSortedSet: TreeSet<Int> = sortedSetOf(4, 1, 7, 2)
intSortedSet.add(6)
intSortedSet.remove(1)
println(intSortedSet) // 오름차순 정렬된 결과
intSortedSet.clear()
println(intSortedSet)
}
[2, 4, 6, 7]
[]
linkedSetOf()
함수로 Set을 생성하면, 자바의 LinkedHashSet을 반환한다.package chap05.section2
import java.util.*
fun main() {
val linkedHashSet: LinkedHashSet<Int> = linkedSetOf(4, 1, 7, 2)
linkedHashSet.add(6)
linkedHashSet.remove(1)
println(linkedHashSet)
linkedHashSet.clear()
println(linkedHashSet)
}
[4, 7, 2, 6]
[]
mapOf()
, 가변형은 mutableMapOf()
함수로 생성 val map: Map<key type, value type> = mapOf(key to value [, ...])
package chap05.section2
fun main() {
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")
}
println("langMap[22] = ${langMap[22]}")
println("langMap.get(22) = ${langMap.get(22)}")
println("langMap.keys = ${langMap.keys}")
}
key = 11, value = Java
key = 22, value = Kotlin
key = 33, value = C++
langMap[22] = Kotlin
langMap.get(22) = Kotlin
langMap.keys = [11, 22, 33]
package chap05.section2
fun main() {
val capitalCityMap: MutableMap<String, String> =
mutableMapOf("Korea" to "Seoul", "China" to "Beijing", "Japan" to "Tokyo")
println(capitalCityMap.keys)
println(capitalCityMap.values)
capitalCityMap.put("UK", "London")
capitalCityMap.remove("China")
println(capitalCityMap)
val addData = mutableMapOf("USA" to "Washington")
capitalCityMap.putAll(addData) // 맵 자체를 추가
println(capitalCityMap)
}
[Korea, China, Japan]
[Seoul, Beijing, Tokyo]
{Korea=Seoul, Japan=Tokyo, UK=London}
{Korea=Seoul, Japan=Tokyo, UK=London, USA=Washington}
package chap05.section2
import java.util.SortedMap
fun main() {
val hashMap: HashMap<Int, String> = hashMapOf(1 to "Hello", 2 to "World")
println("hashMap: $hashMap")
val sortedMap: SortedMap<Int, String> = sortedMapOf(2 to "Apple", 1 to "Banana")
println("sortedMap: $sortedMap") // 키에 대해 오름차순 정렬
val linkedHashMap: LinkedHashMap<Int, String> = linkedMapOf(1 to "Computer", 2 to "Mouse")
println("linkedHashMap: $linkedHashMap")
}
hashMap: {1=Hello, 2=World}
sortedMap: {1=Banana, 2=Apple}
linkedHashMap: {1=Computer, 2=Mouse}
햄버거 Set 한 개요~