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 |