Kotlin ArayのtoListとasListはどう違いますか?

1445 ワード

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にも影響を与えることを意味します。
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