Kotlin Set 다양한 사용법
Set 개요
Kotlin의 Set은 Java의 Set을 기반으로 한 컬렉션이다. List와 비슷하지만, 중복되지 않는 요소만 보유하고 순서의 개념이 없다.
Set & MutableSet
Set
은 읽기만 지원하는 인터페이스이다.
interface Set<out E> : Collection<E>
MutableSet
은 요소의 추가 및 삭제 처리를 제공한다.
interface MutableSet<E> : Set<E>, MutableCollection<E>
Set 생성 (setOf)
불변(immutable) 세트는 Kotlin에 내장된 setOf
함수로 생성할 수 있다.
fun main() {
var s = setOf("Red", "Green", "Blue")
println(s)
}
Output:
[Red, Green, Blue]
간단한 예로 변경이 가능한 Set
를 만들어 보도록 하겠다.
Set 생성 후 요소를 추가/제거하고 싶다면 mutableSetOf
함수로 세트를 생성해야 한다.
val set: MutableSet<Int> = mutableSetOf(1, 2, 3)
set.add(1)
set.add(4)
println(set)
Output:
[1, 2, 3, 4]
Set 중복 요소
Set 중복으로 값을 넣어보도록 하겠다.
val set: Set<Int> = setOf(1, 2, 3, 1, 2)
println(set)
Output:
[1, 2, 3]
Set은 중복되는 요소는 유지하지 않으므로, 1과 2가 하나만 저장되었다.
Set의 집합 연산 수행
Set 객체에 +
나 -
등의 연산을 통해 합집합이나 차집합을 구할 수 있다.
합집합 (union)
+
연산자 또는 union()
함수를 사용하여 세트 간의 합집합(두 세트에 포함된 요소로 이루어진 집합)을 구할 수 있다. union()
은 infix 함수로 정의되어 있기 때문에 연산자처럼 사용할 수 있습니다.
val s1 = setOf(1, 2, 3, 4)
val s2 = setOf(3, 4, 5, 6)
println(s1 + s2) // [1, 2, 3, 4, 5, 6]
println(s1 union s2) // 동일
println(s1.union(s2)) // 동일
공통집합/적합집합 (intersection)
intersect
함수를 사용하면 두개 Set의 공통 집합(두 세트에 포함된 요소로 구성된 집합)을 구할 수 있다. intersect()
는 infix 함수로 정의되어 있기 때문에 연산자처럼 사용할 수 있습니다.
val s1 = setOf(1, 2, 3, 4)
val s2 = setOf(3, 4, 5, 6)
println(s1 intersect s2) // [3, 4]
println(s1.intersect(s2)) // 동일
차집합 (difference)
-
연산자 또는 minus()
함수, subtract()
함수를 사용하여 두개 Set의 차집합(왼쪽에 지정한 세트에만 존재하는 요소로 구성된 집합)을 구할 수 있다. subtract()
는 infix 함수로 정의되어 있기 때문에 연산자처럼 사용할 수 있다.
val s1 = setOf(1, 2, 3, 4)
val s2 = setOf(3, 4, 5, 6)
println(s1 - s2) // [1, 2].
println(s1.minus(s2)) // 동일
println(s1 subtract s2) // 동일
println(s1.subtract(s2)) // 동일
차집합은 좌변과 우변의 값을 바꾸면 결과가 달라진다는 점에 유의해야 한다.
println(s1 - s2) // [1, 2].
println(s2 - s1) // [5, 6].