본문 바로가기
2학년 2학기/모바일 소프트웨어 - 코틀린

Array, Generic, Collection) Set

by print_soo 2024. 10. 13.

Set은 순서가 없고, 중복을 허용하지 않는 원소들의 모음이다. 즉, 인덱싱이 불가하다.

 

 

[불변 Set - setOf<T>()]

Set의 size

: 중복은 제거하고 요소 개수를 센다.

 

val setA: Set<Int> = setOf(1,2,3,4,4,4)
println(setA.size) // 4가 중복이기 때문에 개수는 4개

 

 

 

 

Set을 List로 변환

: List로 변환하면 인덱싱도 가능해진다.

 

val listA: List<Int> = setA.toList()
println(listA) //[1, 2, 3, 4]

 

 

 

 

 

null 값이 있는 Set

: ?를 사용해서 null 있어도 안전하게 처리해야한다.

null도 중복을 허용하지 않기 때문에, 하나만 있다고 간주한다.

val setA: Set<String? > = setOf("How", "Are", "You", null, null, null)
print(setA) //[How, Are, You, null]

 

 

 

Set끼리 비교

val setA = setOf(1, 2, 3, 4, 4, 4)
val setB = setOf(4, 2, 3, 1)
    
println(setA == setB) //true

 

set은 중복을 허용하지 않고 순서가 없기 때문에 두개의 set은 같다고 본다.

 

 

빈 set 값 추가

fun main(){
    var setA = emptySet<Int>() //불변 Set
    setA = buildSet { //빈 set을 만드는 과정
        add(1)
        add(2)
    }
    // set 완성
    println(setA)
    setA.add(3) //이미 만들어진 set에는 추가할 수 없다.
}

 

set이 만들어지는 과정을 지나고는 추가할 수 없다.

 

 

합집합, 교집합, 차집합

fun main(){
    var setA = setOf(1, 2, 3, 4, 5)
    var setB = setOf(1, 2, 3)

    println(setA.union(setB)) //합집합 - [1, 2, 3, 4, 5]
    println(setA.intersect(setB)) //교집합 - [1, 2, 3]
    println(setA.minus(setB)) //차집합 - [4, 5]


}

 


 

 

[가변 Set - mutableSetOf<T>()]

Set 생성 종류들 - 그다지 중요하지 않음

fun main(){
    val setA: MutableSet<Int> = mutableSetOf(1376, 2341, 9783, 6624)
    val setB: HashSet<Int> = hashSetOf(1376, 2341, 9783, 6624)
    val setC: TreeSet<Int> = sortedSetOf(1376, 2341, 9783, 6624)
    val setD: LinkedHashSet<Int> = linkedSetOf(1376, 2341, 9783, 6624)
    val setE = setOf(41, 23, 27, 16)

    println("MutableSet<Int> : ${setA.first()}, ${setA.last()}") //MutableSet<Int> : 1376, 6624
    println("HashSet<Int> : ${setB.first()}, ${setB.last()}") //HashSet<Int> : 1376, 9783
    println("TreeSet<Int> : ${setC.first()}, ${setC.last()}") //TreeSet<Int> : 1376, 9783
    println("LinkedHashSet<Int> : ${setC.first()}, ${setC.last()}") //MutableSet<Int>와 동일하다.
    println("Set<Int> : ${setC.first()}, ${setC.last()}") //LinkedHashSet<Int>으로 
}

 

 

 

Set 수정하기 - 1

: 특정 요소를 삭제하고 추가하는 방법이다.

    val emotion = hashSetOf("Happy", "Sad", "Disappointed", "Excited", "Hopeful")
    emotion.remove("Sad")
    emotion.add("Joyful")
    println(emotion) //[Disappointed, Excited, Joyful, Happy, Hopeful]

 

 

Set 수정하기 - 2 

: map을 통해서 set을 순환하면서 해당 요소가 특정 값이라면 변경하고 아니라면 유지하는 방식이다. 또한 map의 반환값은 List이기 때문에 set으로 변경해야한다.

var newSet = emotion.map { if ( it == "Disappointed") "notDisappointed" else it } .toSet()
println(newSet) // [notDisappointed, Excited, Joyful, Happy, Hopeful]

 

'2학년 2학기 > 모바일 소프트웨어 - 코틀린' 카테고리의 다른 글

Coroutine(1)  (0) 2024.10.13
Array, Generic, Collection) Map  (0) 2024.10.13
Array, Generic, Collection) List  (0) 2024.10.13
Array, Generic, Collection) Generic  (0) 2024.10.13
1~5장 교수님 블로그  (1) 2024.10.12