Android

[Kotlin] 코틀린 - 컬렉션 타입(Array, List, Set, Map)

귀뚜래미 2024. 8. 1. 14:52
728x90

Array

Array 클래스의 생성자 : <init>(size: Int. init: (Int) -> T)

- 배열에 접근할 때는 대괄호([])를 이용하거나 .set(), .get()을 이용해 접근

 

fun main(){
    // 배열크기가 3인 Int형 배열을 0으로 초기화함
    val arrData: Array<Int> = Array(3, {0})
    println(arrData.joinToString()) // 0, 0, 0

    arrData[0] = 10     // 0번째 인덱스에 10 할당([]로 접근)
    arrData[1] = 20     // 1번째 인덱스에 20 할당([]로 접근)
    arrData.set(2, 30)  // 2번째 인덱스에 30 할당(.set으로 접근)

    println("""
        arr size : ${arrData.size}
        arr data0 : ${arrData[0]}       // 0번째 인덱스 값 : 10([]로 접근)
        arr data1 : ${arrData[1]}       // 1번째 인덱스 값 : 20([]로 접근)
        arr data2 : ${arrData.get(2)}   // 2번째 인덱스 값 : 30(.get으로 접근)
    """.trimIndent())
}

 

 

기타 배열 선언 방식

- 배열의 데이터가 기초타입이면 Array를 사용하지 않고 각 기초타입 클래스 사용 가능

(BooleanArray, ByteArray, CharArray, DoubleArray, FloatArray, IntArray, LongArray, ShortArray)

 

val bArr: BooleanArray = BooleanArray(3, {false})
val iArr: IntArray = IntArray(3, {1})

println(bArr.joinToString()) // false, false, false
println(iArr.joinToString()) // 1, 1, 1

 

 

- arrayOf() 를 이용해 배열을 선언하면서 값을 할당할 수 있음

 

val arr = arrayOf(1, 2, 3)
println(arr.size) // 3
println(arr::class) // class [Ljava.lang.Integer; (Kotlin reflection is not available)
println("${arr[0]}, ${arr[1]}, ${arr.get(2)}")  // 1, 2, 3

 

 

 

List, Set, Map

- Collection 타입의 클래스

- List : 순서있는 데이터 집합, 데이터 중복 허용

- Set : 순서없는 데이터 집합, 데이터 중복 허용X

- Map : 키, 값 쌍으로 이루어진 순서 없는 데이터 집합, 키 중복 허용X

 

구분 타입 함수 특징
List List listOf() 데이터 변경 불가
MutableList mutableListOf() 데이터 변경 가능
Set Set setOf() 데이터 변경 불가
MutableSet mutableSetOf() 데이터 변경 가능
Map Map mapOf() 데이터 변경 불가
MutableMap mutableMapOf() 데이터 변경 가능

 

fun main(){
    var list1 = listOf<Int>(1,2)          // 불변 list
    var list2 = mutableListOf<Int>(1,2)   // 가변 list

    println("${list1.size}, ${list1[0]}, ${list1[1]}") // 2, 1, 2

    list2.add(3)    // 가변 list에 항목 추가
    list2.set(0, 3) // 가변 list의 0번 인덱스 값 변경
    println("${list2.size}, ${list2[0]}, ${list2[1]}, ${list2.get(2)}") // 3, 3, 2, 3
}

 

 

Map

- Map은 키와 값으로 이루어진 데이터 집합이다. C#에서의 Dictionary와 매우 유사하다.

- 코틀린에서 Map은 키와 값의 쌍을 저장하는 불변(immutable) 컬렉션이다. 만약 변경 가능한(가변) 맵이 필요하다면 MutableMap을 사용한다.

- "one" to 1 처럼 객체에 대입하거나 Pair("one", 1) 처럼 객체에 대입하는 방법이 있다.

 

fun main() {
    // 불변 Map
    val immutableMap: Map<String, Int> = mapOf(Pair("one", 1), "two" to 2, "three" to 3)

    // 가변 Map
    val mutableMap: MutableMap<String, Int> = mutableMapOf(Pair("one", 1), "two" to 2, "three" to 3)

    // 값 접근
    println("Immutable Map: ${immutableMap["one"]}") // 출력: 1
    println("Mutable Map before update: ${mutableMap["two"]}") // 출력: 2

    // 값 추가/수정
    mutableMap["two"] = 22
    mutableMap["four"] = 4
    println("Mutable Map after update: $mutableMap") // 출력: {one=1, two=22, three=3, four=4}

    // 값 제거
    mutableMap.remove("one")
    println("Mutable Map after removal: $mutableMap") // 출력: {two=22, three=3, four=4}
}
728x90