Kotlin Array
クラスは、asList()
、toList()
、およびtoMutableList()
メソッドを提供します。最初の2つのメソッドはどちらもList
を返し、 Kotlinリファレンス で次のように説明されています。
asList()
は、元のList
をラップするArray
を返します。toList()
は、[元のList
]のすべての要素を含むArray
を返します。これらのメソッドappearは交換可能です。これら2つの方法の実際の違いは何ですか?
asList
で作成されたリストは、originalArray
への参照を保持します。toList
/toMutableList
を使用して作成されたリストは、元のArray
のcopyでサポートされています。
asList
asList
関数は、再利用sameArray
インスタンスを再利用するリストを作成します。これは、元の配列への変更がList
:
val arr = arrayOf(1, 2, 3)
val l1 = arr.asList()
arr[0] = 4
println(l1) // [4, 2, 3]
toList
これはtoList
/toMutableList
には当てはまりません。これは、配列がコピーされているためです:
val arr = arrayOf(1, 2, 3)
val l2 = arr.toList()
arr[0] = 4
println(l2) // [1, 2, 3]
Kotlinのソースコードは here にあります。
基本的にasList()
は、元のArray
への参照を維持します。つまり、そのリストへの変更は、基になるArray
も変更します。
toList()
は、Array
の値を新しいList
にコピーするだけですが、その後に残るリンクはありません。
ほとんどのユースケースでは、それらはおそらく交換可能です。 asList()
はパフォーマンスがわずかに向上する可能性が高く(コピーを実行していないため)、toList()
は予期しない変更に対して「安全な」コピーになります。