본문 바로가기

Kotlin/Basic

집합: Set, MutableSet


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