1. 概要

この非常に短いチュートリアルでは、Kotlinで配列をリストに変換するいくつかの方法を学習します。

これらのアプローチを、元の要素をコピーするアプローチとコピーせずにコピーするアプローチの2つのグループに分類します。

2. コピーして変換する

Kotlin Arrayを対応するListバージョンに変換するために、 toList()拡張関数を使用できます。

val array = intArrayOf(1, 2, 3, 4)
val list = array.toList()

assertEquals(listOf(1, 2, 3, 4), list)

リストであるため、変換後に変更することはできません。 後でリストを変更する必要がある場合は、toMutableList()拡張関数を使用する必要があります。

val array = intArrayOf(1, 2, 3, 4)
val mutable = array.toMutableList()

assertEquals(listOf(1, 2, 3, 4), mutable)

mutable.add(5)
assertEquals(listOf(1, 2, 3, 4, 5), mutable)

上記のように、変換後、変換されたリストに1つの要素を追加しました。 これが可能なのは、この関数がプレーンなListではなくMutableListのインスタンスを返すためです。

2.1. リンクと複雑さ

両方の関数が配列値を新しいリストにコピーしています。 したがって、変換後、配列とリストの間に長引くリンクはありません。 つまり、配列要素を変更しても、その変更は変換されたリストに反映されません。

array[0] = 0
assertEquals(listOf(1, 2, 3, 4), list) // list didn't change

さらに、ソース配列からすべての要素をコピーする必要があるため、変換アルゴリズムの時間と空間の複雑さは O(n)になります。

3. ラッピングによる変換

配列と変換されたリストの間の参照を維持したい場合は、 asList()関数を使用する必要があります。

val array = intArrayOf(1, 2, 3, 4)
val list = array.asList()

assertEquals(listOf(1, 2, 3, 4), list)

この関数は、元の配列に基づく新しいリストを作成します。 したがって、配列を変更すると、変換されたリストに影響します。

array[0] = 0
assertEquals(listOf(0, 2, 3, 4), list)

また、変換アルゴリズムは、時間と空間の両方の複雑さの観点から O(1)で実行されます。

4. 結論

このチュートリアルでは、Kotlin Arrayを対応するListまたはMutableListに変換する方法を説明しました。

asList()関数は元の配列を再利用するため、速度とメモリ使用量の点でフットプリントが向上します。 ただし、元の配列と変換されたリストの間のリンクのために、混乱が生じる可能性があります。 いつものように、私たちはこれらの微妙な違いに注意し、仕事に適したツールを選択する必要があります!

いつものように、すべての例はGitHubから入手できます。