6-5. 配列 (Array)
概要
配列(Array)は、同様な種類のデータのコレクションを保持するために利用されます。値ごとに別の変数を用意するのではなく、複数の値を1つの配列に保持できます。
配列の種類
いずれも配列のインデックスは 0 から始まります。
一般的な型の配列
Array<型>(要素の数) {初期値}
型名 (クラス) | 配列の要素の形 | 作成する際の関数 |
---|---|---|
Array | <型> で指定 数値型以外も指定可能 | arrayOf() arrayOfNulls() |
プリミティブ型の配列
型名 (クラス) | 配列の要素の型 | 作成する際の関数 |
---|---|---|
IntArray | Int 型 | intArrayOf() |
ShotArray | Short 型 | shortArrayOf() |
LongArray | Long 型 | longArrayOf() |
ByteArray | Byte 型 | byteArrayOf() |
BooleanArray | Boolean 型 | booleanArrayOf() |
FloatArray | Float 型 | floatArrayOf() |
DoubleArray | Double 型 | doubleArrayOf() |
CharArray | Char 型 | charArrayOf() |
一般的な型とプリミティブ型の違い
Kotlin だと数値型は基本的にオブジェクトです。
プリミティブ型の配列の場合は いわゆる数値だけの配列となりますが、一般的な型の配列は オブジェクトの配列になります。
boxing の際のオーバヘッドなしで作成できるのが、プリミティブ型の配列となります。
補足
Java では、int などの基本形 (プリミティブ型) と、基本形のラッパーとして Integer などの参照型オブジェクトがあります。参照型オブジェクトにするとメソッドが使えます。
プリミティブ型から参照型オブジェクトを作成することを boxing (ボクシング) といいます。
(逆の処理は unboxing)
Kotlin は、JVM 上で動作するバイトコードへのコンパイルされますが、Int などの数値型は、必要に応じて内部的にプリミティブ型として扱われます。
配列オブジェクトを作成する関数と例
空の配列を作成
一般的な型の配列
val array1 = arrayOf<Int>()
val array2 = arrayOf<Double>()
プリミティブ型の配列
val array1 = intArrayOf()
val array2 = doubleArrayOf()
サイズだけ指定して作成
プリミティブ型の配列は、サイズだけ指定して作成することができます。各要素の値は 0 で初期化されます。
CharArray は null文字(`\u0000\’) で初期化されます。参照
val arrayI = IntArray(5)
val arrayS = ShortArray(5)
val arrayL = LongArray(5)
val arrayBy = ByteArray(5)
val arrayBo = ByteArray(5)
val arrayF = FloatArray(5)
val arrayD = DoubleArray(5)
val arrayC = CharArray(5)
初期値を明示して作成
一般的な型の配列
val array1 : Array<Int> = arrayOf(1, 2, 3, 4, 5, 6)
val array : Array = arrayOf("Hello", "world", "!") //要素の型を省略。要素から型推論
プリミティブ型の配列
val array2 : IntArray = intArrayOf(1, 2, 3, 4, 5)
null で初期化された配列を作成
一般的な方の配列に すべての要素を null で初期化した配列を作る関数 arrayOfNulls() というものがあります。
val array1 : Array<Int?> = arrayOfNulls(5)
試しに出力させると null と表示されます。
例) IntelliJ IDEA の PEAL で実行
Welcome to Kotlin version 1.9.0-release-358 (JRE 1.8.0_362-b08)
Type :help for help, :quit for quit
val array1 : Array<Int?> = arrayOfNulls(5)
println(array1[0])
println(array1[1])
println(array1[2])
println(array1[3])
println(array1[4])
nullnullnullnullnull
Kotlin Playground で実行