Kotlin Array的toList和asList有何不同?

21 篇文章 0 订阅

Kotlin Array类提供asList(),toList()和toMutableList()方法.前两个方法都返回一个List,并在Kotlin reference中描述如下:

 

> asList()返回包装原始Array的List.
> toList()返回一个List,其中包含[原始Array]的所有元素.

这些方法似乎可以互换.这两种方法在实践中有何不同?

最佳答案

TL; DR

 

使用asList创建的列表保留对原始Array的引用.
使用toList / toMutableList创建的列表由原始Array的副本支持.

说明

asList

asList函数创建一个重用相同Array实例的列表,这意味着对原始数组的更改也会对List产生影响:

val arr = arrayOf(1, 2, 3)
val l1 = arr.asList()

arr[0] = 4
println(l1) // [4, 2, 3]
toList

toList

由于复制了数组,因此toList / toMutableList不是这种情况:

val arr = arrayOf(1, 2, 3)
val l2 = arr.toList()

arr[0] = 4
println(l2) // [1, 2, 3]

Kotlin源代码可以找到here.

 

kotlin Array和List互转

 

我们先来看一下java是怎么实现的:

List<String> a = new ArrayList<>();
        a.add("aaa");
        a.add("bbb");
        a.add("ccc");
        String[] b = a.toArray(new String[0]);

Array—>List:

    List<String> c = Arrays.asList(b);

 

下面来看看kotlin是怎么实现的:

List  —>Array:

        val a = ArrayList<String>()
        a.add("aaa")
        a.add("bbb")
        a.add("ccc")
        val b = a.toTypedArray()


Array—>List: 

val c = Arrays.asList(*b)

val c=  b.asList()

val c= b.toList


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值