当前位置: 首页 > 知识库问答 >
问题:

Kotlin中列表和数组类型的区别

宗政安歌
2023-03-14

列表数组类型有什么区别?
似乎可以用它们进行相同的操作(循环、筛选表达式等。),在行为或用法上有什么区别吗?

val names1 = listOf("Joe","Ben","Thomas")
val names2 = arrayOf("Joe","Ben","Thomas")

for (name in names1)
    println(name)
for (name in names2)
    println(name)

共有1个答案

东方和煦
2023-03-14

数组和列表(由list 及其子类型mutableList 表示)有许多不同之处,以下是最显著的:

>

  • array 是一个已知实现的类:它是一个存储项的顺序固定大小的内存区域(在JVM上,它由Java数组表示)。

    List MutableList 是具有不同实现方式的接口:ArrayList ,LinkedList 等,在具体实现中定义了列表的内存表示和操作逻辑,如LinkedList 中的索引经过链接需要O(n)时间,而ArrayList 将其项存储在动态分配的数组中。

    val list1: List<Int> = LinkedList<Int>()
    val list2: List<Int> = ArrayList<Int>()
    

    数组 是可变的(可以通过对它的任何引用来更改它),但是列表 没有修改方法(它既是mutableList 的只读视图,也是不可变的列表实现)。

    val a = arrayOf(1, 2, 3)
    a[0] = a[1] // OK
    
    val l = listOf(1, 2, 3)
    l[0] = l[1] // doesn't compile
    
    val m = mutableListOf(1, 2, 3)
    m[0] = m[1] // OK
    

    数组有固定的大小,不能扩展或收缩,保留标识(您需要复制一个数组来调整它的大小)。对于列表,mutableList 具有addremove函数,因此可以增加和减少其大小。

    val a = arrayOf(1, 2, 3)
    println(a.size) // will always be 3 for this array
    
    val l = mutableListOf(1, 2, 3)
    l.add(4)
    println(l.size) // 4
    

    数组 t上是不变的(数组 不是数组 ),mutableList 也是一样的,但是列表 是协变的(列表 列表 )。

    val a: Array<Number> = Array<Int>(0) { 0 } // won't compile
    val l: List<Number> = listOf(1, 2, 3) // OK
    

    数组针对基元进行了优化:有单独的intarraydoublearraycharray等,它们映射到Java基元数组(int[]double[]char[]),而不是装箱的(array 映射到Java的integer[])。列表通常没有针对原语优化的实现,尽管一些库(在JDK之外)提供了原语优化的列表。

    list mutablelist 是映射的类型,在Java互操作性方面具有特殊的行为(从Kotlin看来,Java的list list mutablelist )。数组也是映射的,但它们有Java互操作性的其他规则。

    批注中使用了某些数组类型(基元数组、数组 和带有枚举类条目的数组),批注有一个特殊的数组文字语法。在批注中不能使用列表和其他集合。

    至于用法,好的实践是除了代码的性能关键部分外,在任何地方都更喜欢使用列表而不是数组,这与Java的道理是一样的。

  •  类似资料:
    • 问题内容: Java中的List和Array有什么区别?或Array和Vector之间的区别! 问题答案: 通常(在Java中),数组是一种数据结构,通常由存储对象集合的顺序存储器组成。 是Java中的接口,这意味着它可能具有多种实现。这些实现之一是,这是一个使用数组作为数据结构来实现接口行为的类。 还有许多其他实现该接口的类。查看它们的一种简单方法是查看以下位置的Javadoc :http :

    • 2.5 列表和元组类型 整数类型、浮点数类型和布尔类型都是最简单的“原子”数据类型,因为这些类型的值 是不可分割的基本数据项。而字符串类型稍微有点复杂,因为字符串可以看成是由许多单字 符组成的有序的集合体,我们可以通过索引操作来深入到字符串内部访问其成员。不过,通 常我们仍然将字符串类型归为简单的基本类型,毕竟构成字符串的成员是非常简单的单字 符。 对于单个数据,我们可以用一个变量来存储。假如程序

    • 本文向大家介绍python中列表和元组的区别,包括了python中列表和元组的区别的使用技巧和注意事项,需要的朋友参考一下 如果有了解过python中的列表和元组,你可能会知道相对于列表,元组是不可变的,也就是说元组中的数据不能随意更改。除了列表是用中括号表示而元组是用小括号表示之外,这两种数据类型好像并没有什么不同,都是用来存放一系列的数据,事实真是如此吗? 看起来除了元组不可变之外,列表完全可

    • 问题内容: 您能帮助我了解 无界通配符类型列表 和 原始类型列表 之间的区别吗? 除此之外,有人可以帮助我了解什么是有 界类型参数列表 ? 问题答案: 以下是这三个的摘要: :没有类型参数的列表。它是一个列表,其元素可以是任何类型- 元素可以是不同类型 。 :具有无限制类型参数的列表。它的元素是特定但未知的类型。 元素必须都是相同的类型 。 :带有类型参数称为的列表。所提供的类型必须是extens

    • 我在核心Java一书中读到了下面的片段。 将数组列表分配为新的ArrayList<'Employee>(100)//容量为100 与分配新数组不同,因为new Employee[100]//大小为100 数组列表的容量和数组的大小之间有一个重要的区别。如果分配一个数组有100个条目,那么该数组就有100个插槽,可以使用。一个容量为100个元素的数组列表有可能容纳100个元素(事实上,以额外重新分配

    • 我试图创建动态下拉,其值是从使用微服务的查找表之一填充,但我已经尝试了许多方式相同,到目前为止,我还没有成功地使其工作。 下面的代码用于调用webservice 这是我的对象类型 仅用于显示目前运行的以下代码 我做了什么我尝试调用webservice在多种方式调用它,尝试铸造服务响应直接使用JSON字符串响应和可能的事情我尝试过。 你能在这里帮忙吗?我们将不胜感激。