Kotlinの配列の初期化について

採用はこちら

Kotlinにおける配列の初期化は、Javaや他言語の経験者ほど「思い込み」でつまずきやすいポイントです。

本記事では、Kotlin特有の配列設計思想を踏まえつつ、基本から実務でよく使うパターンまでを網羅的に解説します。

目次

Kotlinの配列の基本思想

配列(Array)は「固定長」

Kotlinの配列は サイズが固定 です。

val array = Array(3) { 0 }
  • 要素数は後から変更できない
  • 追加・削除は不可

ただし誤解されがちですが、要素の値自体は変更可能です。

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

サイズを変えたい場合は List を使う

val list = mutableListOf(1, 2, 3)
list.add(4)

arrayOf による基本的な初期化

値を直接指定する方法(最も一般的)

val numbers = arrayOf(1, 2, 3)
val fruits = arrayOf("apple", "banana", "orange")
  • 型は自動推論される
  • 可読性が高く、実務でも頻出

型を明示することもできます。

val numbers: Array<Int> = arrayOf(1, 2, 3)

空配列の作成

val empty1 = emptyArray<Int>()
val empty2 = arrayOf<Int>()

arrayOf()引数なしでも使用可能ですが、型引数を付けないと Array<Nothing> になりやすいため注意が必要です。

Array コンストラクタによる初期化(重要)

インデックスを使って初期値を生成

val squares = Array(5) { i -> i * i }

結果:

[0, 1, 4, 9, 16]

構文

Array(サイズ) { インデックス -> 初期値 }

よく使われる例:

val zeros = Array(10) { 0 }
val indices = Array(5) { it }

null で初期化する配列

val array = arrayOfNulls<String>(5)
  • 型は Array<String?>
  • Javaとの相互運用やキャッシュ用途でよく使われる

プリミティブ型専用配列(非常に重要)

Kotlinでは、パフォーマンス最適化のため、プリミティブ型専用の配列クラスが用意されています。

専用配列
IntIntArray
LongLongArray
DoubleDoubleArray
BooleanBooleanArray
CharCharArray

IntArray の初期化例

val nums1 = IntArray(5)
val nums2 = IntArray(5) { it * 2 }

Array<Int> との違い

val a1 = arrayOf(1, 2, 3)    // Array<Int>
val a2 = intArrayOf(1, 2, 3) // IntArray
項目ArrayIntArray
内部表現オブジェクトプリミティブ
null不可(Int?なら可)不可
パフォーマンス通常高速

数値処理やループが多い場面では IntArray が推奨されます。

型が混在する配列

val mixed = arrayOf(1, "text", true)

この場合、型は Array<Any> になります。

  • コンパイルは通る
  • 型安全性が低下するため、実務では非推奨

多次元配列の初期化

2次元配列(Array of Array)

val matrix = Array(3) {
    Array(4) { 0 }
}
  • 3行 × 4列
  • 各行は別インスタンスなので安全

数値向けの2次元配列

val matrix = Array(3) {
    IntArray(4)
}

競技プログラミングや数値計算で定番です。

参照共有に注意(NG例)

val row = IntArray(3)
val matrix = Array(3) { row } // 全行が同じ参照

正しい書き方

val matrix = Array(3) { IntArray(3) }

配列と List の変換(実務で頻出)

val list = listOf(1, 2, 3)

val array: Array<Int> = list.toTypedArray()
val intArray: IntArray = list.toIntArray()

実務でよく使う初期化パターン集

val flags = BooleanArray(10)
val counter = IntArray(26)
val chars = CharArray(5) { 'a' }
val cache = arrayOfNulls<String>(100)

配列と List の使い分けまとめ

用途推奨
サイズ固定Array / IntArray
高速な数値処理IntArray
追加・削除ありMutableList
読み取り専用List

まとめ

  • Kotlinの配列は 固定長だが要素は変更可能
  • 初期値指定 → arrayOf
  • 計算生成 → Array(size) { }
  • 数値配列 → IntArray 系を優先
  • null を含めたい場合は Array<T?>
  • サイズ変更が必要なら MutableList

以上、Kotlinの配列の初期化についてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次