Atomic Kotlin Atom26: 집합을 정리한 내용에 개인 스터디한 것을 추가
Set
Set은 각각의 값이 오직 하나만 존재 가능한 컬렉션
보통 in
이나 contains()
를 사용해서 원소 포함여부를 검사할 때 사용
fun main() {
// 중복 허용 안함
val intSet = setOf(1, 1, 2, 3, 9, 9, 4)
// 원소 순서는 중요x
println(setOf(1, 2) == setOf(2, 1)) // >> true
// 원소 포함 여부 검사(in)
println((9 in intSet) == true) // >> true
println((99 in intSet) == false) // >> true
// 원소 포함 여부 검사(contains)
println(intSet.contains(9)) // >> true
println(intSet.contains(99)) // >> false
// 이 집합이 다른 집합을 포함하는가?
println(intSet.containsAll(setOf(1, 9, 2))) // >> true
// 합집합
println(intSet.union(setOf(3, 4, 5, 6))) // >> [1, 2, 3, 4, 5, 6, 9]
// 교집합
println(intSet intersect setOf(0, 1, 2, 7, 8)) // >> [1, 2]
// 차집합
println(intSet subtract setOf(0, 1, 9, 10)) // >> [2, 3, 4]
println(intSet - setOf(0, 1, 9, 10)) // >> [2, 3, 4]
}
Set은 원소 중복을 자동으로 없앤다.
원소 순서는 중요하지 않다.
부분 / 합 / 교 / 차 집합 등의 벤 다이어그램 연산 수행 가능
List의 중복을 제거하려면 Set으로 변환
val list = listOf(1, 1, 2, 3, 2, 4)
val listToSet = list.toSet()
println(listToSet) // >> [1, 2, 3, 4]
setOf()
는 읽기 전용 집합
가변 Set은 mutableSetOf()
로 생성
MutableSet
아래는 mutableSetOf
에서 사용 가능한 메서드들의 사용법을 정리한 예시 코드
un main() {
// MutableSet 생성, 중복 허용 안함
val mutableIntSet = mutableSetOf(1, 2, 3, 4, 5)
// 요소 추가
mutableIntSet.add(6) // set = [1, 2, 3, 4, 5, 6]
println(mutableIntSet)
// 여러 요소 추가
mutableIntSet.addAll(listOf(7, 8)) // set = [1, 2, 3, 4, 5, 6, 7, 8]
println(mutableIntSet)
// 요소 제거
mutableIntSet.remove(1) // set = [2, 3, 4, 5, 6, 7, 8]
println(mutableIntSet)
// 여러 요소 제거
mutableIntSet.removeAll(listOf(2, 3)) // set = [4, 5, 6, 7, 8]
println(mutableIntSet)
// 특정 조건을 만족하는 요소 제거
mutableIntSet.removeIf { it % 2 == 0 } // set = [5, 7]
println(mutableIntSet)
// 모든 요소 제거
mutableIntSet.clear() // set = []
println(mutableIntSet)
// 요소 포함 여부 확인
println(mutableIntSet.contains(5)) // >> false
// 다른 셋의 모든 요소를 포함하는지 확인
println(mutableIntSet.containsAll(setOf(5, 7))) // >> false
}
본인의 경우, 가장 위에 언급된 것 처럼 중복이 없는 데이터 리스트에서 특정 데이터가 존재하는지 파악하기 위해 애용하는 자료구조이다.
Set에서 데이터를 검사하는 것은 O(1)의 시간복잡도로 매우 빠르기 때문
'Kotlin > Basic' 카테고리의 다른 글
Kotlin 코딩테스트 기초 문법 정리 #1 (0) | 2024.06.24 |
---|---|
[Kotlin] 반복문 (2) | 2024.05.18 |
가변 인자 목록: vararg (0) | 2023.12.03 |
[Kotlin] object & companion object (0) | 2023.01.19 |
[Kotlin] lateinit와 lazy의 차이점 (0) | 2023.01.17 |