Arrays in Kotlin are represented by the Array
class. It has get()
and set()
functions that turn into []
by operator overloading conventions,
and the size
property, along with other useful member functions:
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>
// ...
}
To create an array, use the function arrayOf()
and pass the item values to it, so that arrayOf(1, 2, 3)
creates an array [1, 2, 3]
.
Alternatively, the arrayOfNulls()
function can be used to create an array of a given size filled with null
elements.
Another option is to use the Array
constructor that takes the array size and the function that returns values
of array elements given its index:
fun main() {
//sampleStart
// Creates an Array<String> with values ["0", "1", "4", "9", "16"]
val asc = Array(5) { i -> (i * i).toString() }
asc.forEach { println(it) }
//sampleEnd
}
{kotlin-runnable="true" kotlin-min-compiler-version="1.3"}
The []
operation stands for calls to member functions get()
and set()
.
Arrays in Kotlin are invariant. This means that Kotlin does not let us assign an Array<String>
to an Array<Any>
, which prevents a possible runtime failure (but you can use Array<out Any>
,
see Type Projections).
Kotlin also has classes that represent arrays of primitive types without boxing overhead: ByteArray
,
ShortArray
, IntArray
, and so on. These classes have no inheritance relation to the Array
class, but they
have the same set of methods and properties. Each of them also has a corresponding factory function:
val x: IntArray = intArrayOf(1, 2, 3)
x[0] = x[1] + x[2]
// Array of int of size 5 with values [0, 0, 0, 0, 0]
val arr = IntArray(5)
// Example of initializing the values in the array with a constant
// Array of int of size 5 with values [42, 42, 42, 42, 42]
val arr = IntArray(5) { 42 }
// Example of initializing the values in the array using a lambda
// Array of int of size 5 with values [0, 1, 2, 3, 4] (values initialized to their index value)
var arr = IntArray(5) { it * 1 }