코틀린 배열

반응형

Arrays

코틀린 배열은 타입 파라미터를 받는 클래스다. 다른 제네릭 타입에서 처럼 배열 타입의 타입 인자는 객체 타입이 되므로 Array 같은 타입을 선언하면 박싱된 정수의 배열(java.lang.Integer[])이 된다.

class Array<T> private constructor() {
    val size: Int
    operator fun get(index: Int): T
    operator fun set(index: Int, value: T): Unit

    operator fun iterator(): Iterator<T>
    // ...
}

get : 특정 인덱스의 원소 값을 반환 , indexing operator([])로 호출 가능

set : 특정 인덱스의 원소 값을 삽입, indexing operator([])로 호출 가능

 

 

초기화

arrayOf

val arr = arrayOf(1, 2, 3)  //  [1, 2, 3]

 

 

arrayOfNulls

  • 함수에 정수 값을 인자로 넘기면 인자로 넘긴 값의 크기의 모든 원소가 null인 배열을 만들 수 있다. 원소가 널이 될 수 있는 타입만 사용 가능하다.
val arr = arrayOfNulls<Int?>(3) // [null, null, null]

 

 

생성자 

  • 배열 크기와 람다를 인자로 받아서 람다를 호출해서 각 배열 원소를 초기화한다.
val asc = Array(5) { i -> (i * i).toString() } // ["0", "1", "4", "9", "16"]

 

 

순회

배열 요소 순회

val nums = arrayOf(1, 2, 3, 4, 5)

// for
for (element in nums) {
    println(element)
}

// forEach()
nums.forEach { e -> println(e) }

// iterator
val it: Iterator<Int> = nums.iterator()
while (it.hasNext()) {
    val element = it.next()
    println(element)
}

 

 

 

배열 요소와 인덱스 순회

val nums = arrayOf(1, 2, 3, 4, 5)

// indices
for (index in nums.indices) {
    println("arr[$index] = ${arr[index]}")
}

// withIndex
for ((index, element) in nums.withIndex()) {
    println("arr[$index] = $element")
}

// forEachIndexed
nums.forEachIndexed { i, e -> println("arr[$i] = $e") }

 

 

 

참고로 indices를 이용하면 보다 편하게 인덱스 범위안에 해당하는 값인 지를 확인할 수 있다.

인덱스의 범위는 0 부터 배열길이 -1 까지이다.

val nums = arrayOf(1, 2, 3, 4, 5)
val targetIndex = 10


if (0 <= targetIndex && targetIndex <= nums.lastIndex) {
    // 배열 인덱스 범위에 해당
    println(nums[targetIndex])
}

// indices 
if (targetIndex in nums.indices) {
    // 배열 인덱스 범위에 해당
    println(nums[targetIndex])
}

 

 

 


 

Primitive type arrays

박싱하지 않은 원시 타입의 배열이 필요하다면 특별한 배열 클래스를 사용해야 한다.

ByteArray, ShortArray, IntArray 같은 원 시 타입 배열을 제공한다.

각각 byte[], short[], int[] 로 컴파일된다.

 

 

초기화

생성자

val arr = IntArray(5)               //  [0, 0, 0, 0, 0]
val arr2 = IntArray(5) { 42 }       //  [42, 42, 42, 42, 42]
var arr3 = IntArray(5) { it * 1 }    //  [0, 1, 2, 3, 4]

 

 

arrayOf

val integers = intArrayOf(1, 2, 3, 4)

 

 

 

참고