Kotlin ArayのtoListとasListはどう違いますか?
Kotlin ArayはasList()、toList()、toMutable List()の方法を提供しています。前の2つの方法はいずれも1つのListを返し、Kotlin referenceでは次のように説明されています。
>asList()は、元のArayを包装したList.>toList()を返し、「元のAray」のすべての要素を含むListを返します。
これらの方法は互換できるようです。この2つの方法は実践の中で何の違いがありますか?
答えはどこですか
TL;DR
asListを使用して作成したリストは元のArayに対する参照を保持します。toList/toMutable Listを使用して作成したリストは元のArayのコピーによってサポートされます。
説明
as List
asList関数は、同じArayインスタンスを再使用するリストを作成します。これは、元の配列の変更がListにも影響を与えることを意味します。
配列がコピーされているので、toList/toMutable Listはこのような場合ではない。
kotlin ArayとListは互いに回転します。
まず、javaはどうやって実現されるのかを見てみましょう。
ここでは、kotlinがどのように実現されているかを見てみましょう。
List —>Aray:
val a=ArayList() a.add(「aa」) a.add(「bb」) a.add(「ccc」) val b=a.toTypedAray()
Aray->List:
>asList()は、元のArayを包装したList.>toList()を返し、「元のAray」のすべての要素を含むListを返します。
これらの方法は互換できるようです。この2つの方法は実践の中で何の違いがありますか?
答えはどこですか
TL;DR
asListを使用して作成したリストは元のArayに対する参照を保持します。toList/toMutable Listを使用して作成したリストは元のArayのコピーによってサポートされます。
説明
as List
asList関数は、同じArayインスタンスを再使用するリストを作成します。これは、元の配列の変更がListにも影響を与えることを意味します。
val arr = arrayOf(1, 2, 3)
val l1 = arr.asList()
arr[0] = 4
println(l1) // [4, 2, 3]
toList
toList配列がコピーされているので、toList/toMutable Listはこのような場合ではない。
val arr = arrayOf(1, 2, 3)
val l2 = arr.toList()
arr[0] = 4
println(l2) // [1, 2, 3]
Kotlinソースコードはhereを見つけることができます。kotlin ArayとListは互いに回転します。
まず、javaはどうやって実現されるのかを見てみましょう。
List a = new ArrayList<>();
a.add("aaa");
a.add("bbb");
a.add("ccc");
String[] b = a.toArray(new String[0]);
Aray->List: List c = Arrays.asList(b);
ここでは、kotlinがどのように実現されているかを見てみましょう。
List —>Aray:
val a=ArayList() a.add(「aa」) a.add(「bb」) a.add(「ccc」) val b=a.toTypedAray()
Aray->List:
val c = Arrays.asList(*b)
val c= b.asList()
val c= b.toList