Kotlinで配列をリストに変換する
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でから入手できます。