KotlinのArrayについて

採用はこちら

Kotlinの Array(配列) は、同じ型のデータを一定数まとめて管理するための基本的なデータ構造です。

Javaと互換性を持ちながら、Kotlinの型システムと標準ライブラリの拡張関数によって柔軟に扱うことができます。

この記事では、KotlinのArrayについて以下のポイントを詳しく解説します。

    目次

    KotlinのArrayとは

    KotlinのArrayとは、同じ型またはそのサブタイプの値を固定数格納するデータ構造です。

    特徴は次の通りです。

    • 要素数(サイズ)は作成時に決まり、変更できない
    • 各要素はインデックスでアクセスする
    • 要素の値は変更可能
    • Kotlinでは Array<T> というジェネリッククラスとして定義されている

    val fruits = arrayOf("Apple", "Banana", "Orange")
    

    配列の内部構造は次のようになります。

    Index   Value
    0       Apple
    1       Banana
    2       Orange
    

    インデックスは 0から始まる ことに注意してください。

    Arrayの基本的な作り方

    Kotlinでは配列を作成する方法が複数あります。

    arrayOf()

    もっとも基本的な方法です。

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

    型は自動推論されます。

    Array<Int>
    

    文字列の場合

    val names = arrayOf("Tanaka", "Sato", "Suzuki")
    

    型を明示して作成

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

    型を明示するとコードの可読性が上がる場合があります。

    空の配列を作成

    val empty = emptyArray<String>()
    

    型を指定して空配列を作ることができます。

    nullを許容する配列

    val array = arrayOfNulls<String>(3)
    

    結果

    [null, null, null]
    

    要素の取得と変更

    配列の要素には インデックス を使ってアクセスします。

    要素の取得

    val fruits = arrayOf("Apple", "Banana", "Orange")
    
    println(fruits[0])
    

    出力

    Apple
    

    要素の変更

    配列はサイズは固定ですが、要素の値は変更できます

    fruits[1] = "Grape"
    

    結果

    [Apple, Grape, Orange]
    

    get / set

    次の書き方は内部的に同じ意味になります。

    fruits.get(0)
    fruits.set(1, "Grape")
    

    Arrayのループ処理

    配列はループと組み合わせて使われることが多いです。

    for文

    for (fruit in fruits) {
        println(fruit)
    }
    

    インデックスを使う

    for (i in fruits.indices) {
        println(fruits[i])
    }
    

    indices は配列のインデックス範囲を表します。

    withIndex()

    for ((index, value) in fruits.withIndex()) {
        println("$index : $value")
    }
    

    出力

    0 : Apple
    1 : Banana
    2 : Orange
    

    Arrayの初期化方法

    Kotlinではラムダ式を使った配列生成が可能です。

    構文

    Array(size) { index -> 初期値 }
    

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

    結果

    [0, 2, 4, 6, 8]
    

    計算結果を使って配列を初期化できるのが特徴です。

    プリミティブ配列

    Kotlinには2種類の配列があります。

    オブジェクト配列

    Array<Int>
    Array<String>
    

    これはオブジェクト型の配列です。

    プリミティブ配列

    数値型には専用配列があります。

    配列
    IntIntArray
    DoubleDoubleArray
    FloatFloatArray
    LongLongArray
    BooleanBooleanArray
    CharCharArray

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

    IntArray
    

    なぜプリミティブ配列があるのか

    JVMでは

    Array<Int>
    

    を使うと、値は ボクシング(Integerオブジェクト化) されます。

    そのため

    • メモリ消費が増える
    • 処理速度が低下する可能性がある

    この問題を避けるために

    IntArray
    

    のようなプリミティブ配列が用意されています。

    Arrayの便利な関数

    Arrayは多くの標準関数を利用できます。

    size

    println(fruits.size)
    

    first / last

    fruits.first()
    fruits.last()
    

    contains

    fruits.contains("Apple")
    

    joinToString

    println(fruits.joinToString())
    

    結果

    Apple, Banana, Orange
    

    sort

    numbers.sort()
    

    map

    val numbers = arrayOf(1, 2, 3)
    
    val doubled = numbers.map { it * 2 }
    

    結果

    [2, 4, 6]
    

    ただし重要なポイントがあります。

    map() の戻り値は Arrayではなく List です。

    つまり型は次になります。

    List<Int>
    

    ArrayとListの違い

    Kotlinでは配列よりもコレクションAPI(Listなど)がよく使われます。

    しかしArrayとListは役割が異なります。

    特徴ArrayList
    サイズ固定読み取り専用
    要素変更可能不可
    追加削除不可不可

    可変リストは MutableList です。

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

    まとめると

    特徴
    Array固定サイズ
    List読み取り専用
    MutableList要素追加・削除可能

    実務でのArrayの使い分け

    Kotlinでは日常的なデータ操作では

    List / MutableList
    

    がよく使われます。

    一方、Arrayは次の場面で重要です。

    Javaとの相互運用

    JavaのAPIでは配列が多く使われます。

    固定サイズデータ

    • RGB値
    • 行列
    • センサー値

    高速処理

    数値計算では

    IntArray
    DoubleArray
    

    などのプリミティブ配列が有利です。

    まとめ

    KotlinのArrayのポイントを整理すると次の通りです。

    • Array<T> は固定サイズの配列クラス
    • arrayOf() で配列を作成できる
    • Array(size) {} で初期化可能
    • 要素の変更は可能だがサイズ変更は不可
    • 数値型には IntArray などのプリミティブ配列がある
    • map() などの変換操作は Listを返す場合が多い
    • Kotlinでは一般的なデータ処理には List / MutableList がよく使われる

    以上、KotlinのArrayについてでした。

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

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