Kotlin - 列表



Kotlin 列表是有序的项目集合。Kotlin 列表可以是可变的(mutableListOf)或只读的(listOf)。列表的元素可以使用索引访问。Kotlin 可变或不可变列表可以包含重复元素。

创建 Kotlin 列表

对于列表创建,使用标准库函数listOf()用于只读列表,mutableListOf()用于可变列表。

为了防止意外修改,通过将可变列表转换为 List 来获取其只读视图。

示例

fun main() {
    val theList = listOf("one", "two", "three", "four")
    println(theList)
    
    val theMutableList = mutableListOf("one", "two", "three", "four")
    println(theMutableList)
}

运行以上 Kotlin 程序时,将生成以下输出

[one, two, three, four]
[one, two, three, four]

遍历 Kotlin 列表

有多种方法可以遍历 Kotlin 列表。让我们逐一学习它们

使用 toString() 函数

fun main() {
    val theList = listOf("one", "two", "three", "four")
    println(theList.toString())
}

运行以上 Kotlin 程序时,将生成以下输出

[one, two, three, four]

使用迭代器

fun main() {
    val theList = listOf("one", "two", "three", "four")
    
    val itr = theList.listIterator() 
    while (itr.hasNext()) {
        println(itr.next())
    }
}

运行以上 Kotlin 程序时,将生成以下输出

one
two
three
four

使用 for 循环

fun main() {
   val theList = listOf("one", "two", "three", "four")
    
   for (i in theList.indices) {
      println(theList[i])
   }
}

运行以上 Kotlin 程序时,将生成以下输出

one
two
three
four

使用 forEach

fun main() {
   val theList = listOf("one", "two", "three", "four")
    
   theList.forEach { println(it) }
}

运行以上 Kotlin 程序时,将生成以下输出

one
two
three
four
注意 - 这里的it在 Java 中类似于this运算符。

Kotlin 列表的大小

我们可以使用size属性获取列表中元素的总数

fun main() {
    val theList = listOf("one", "two", null, "four", "five")
    
    println("Size of the list " + theList.size)
}

运行以上 Kotlin 程序时,将生成以下输出

Size of the list 5

"in" 运算符

in运算符可用于检查列表中是否存在某个元素。

示例

fun main() {
   val theList = listOf("one", "two", "three", "four")
    
   if("two" in theList){
      println(true)
   }else{
      println(false)
   }
}

运行以上 Kotlin 程序时,将生成以下输出

true

contain() 方法

contain()方法也可用于检查列表中是否存在某个元素。

示例

fun main() {
   val theList = listOf("one", "two", "three", "four")

   if(theList.contains("two")){
      println(true)
   }else{
      println(false)
   }
    
}

运行以上 Kotlin 程序时,将生成以下输出

true

isEmpty() 方法

如果集合为空(不包含任何元素),isEmpty()方法返回true,否则返回false

示例

fun main() {
   val theList = listOf("one", "two", "three", "four")
    
   if(theList.isEmpty()){
      println(true)
   }else{
      println(false)
   }
}

运行以上 Kotlin 程序时,将生成以下输出

false

indexOf() 方法

indexOf()方法返回列表中指定元素第一次出现的索引,如果列表中不包含指定元素,则返回 -1。

示例

fun main() {
   val theList = listOf("one", "two", "three", "four")
    
   println("Index of 'two' :  " + theList.indexOf("two"))
}

运行以上 Kotlin 程序时,将生成以下输出

Index of 'two' :  1

get() 方法

get()方法可用于获取列表中指定索引处的元素。第一个元素的索引为零。

示例

fun main() {
   val theList = listOf("one", "two", "three", "four")

   println("Element at 3rd position " + theList.get(2))
}

运行以上 Kotlin 程序时,将生成以下输出

Element at 3rd position three

列表添加

我们可以使用+运算符将两个或多个列表添加到一个列表中。这会将第二个列表添加到第一个列表中,即使重复元素也会被添加。

示例

fun main() {
    val firstList = listOf("one", "two", "three")
    val secondList = listOf("four", "five", "six")
    val resultList = firstList + secondList
    
    println(resultList)
}

运行以上 Kotlin 程序时,将生成以下输出

[one, two, three, four, five, six]

列表减法

我们可以使用-运算符从另一个列表中减去一个列表。此操作将从第一个列表中删除公共元素并返回结果。

示例

fun main() {
    val firstList = listOf("one", "two", "three")
    val secondList = listOf("one", "five", "six")
    val resultList = firstList - secondList
    
    println(resultList)
}

运行以上 Kotlin 程序时,将生成以下输出

[two, three]

列表切片

我们可以使用slice()方法从给定列表中获取子列表,该方法利用元素索引的范围。

示例

fun main() {
    val theList = listOf("one", "two", "three", "four", "five")
    val resultList = theList.slice( 2..4)
    
    println(resultList)
}

运行以上 Kotlin 程序时,将生成以下输出

[three, four, five]

删除列表中的 null

我们可以使用filterNotNull()方法从 Kotlin 列表中删除null元素。

fun main() {
    val theList = listOf("one", "two", null, "four", "five")
    val resultList = theList.filterNotNull()
    
    println(resultList)
}

运行以上 Kotlin 程序时,将生成以下输出

[one, two, four, five]

过滤元素

我们可以使用filter()方法过滤出与给定谓词匹配的元素。

fun main() {
    val theList = listOf(10, 20, 30, 31, 40, 50, -1, 0)
    val resultList = theList.filter{ it > 30}
    
    println(resultList)
}

运行以上 Kotlin 程序时,将生成以下输出

[31, 40, 50]

删除前 N 个元素

我们可以使用drop()方法删除列表中的前 N 个元素。

fun main() {
    val theList = listOf(10, 20, 30, 31, 40, 50, -1, 0)
    val resultList = theList.drop(3)
    
    println(resultList)
}

运行以上 Kotlin 程序时,将生成以下输出

[31, 40, 50, -1, 0]

分组列表元素

我们可以使用groupBy()方法对与给定谓词匹配的元素进行分组。

fun main() {
    val theList = listOf(10, 12, 30, 31, 40, 9, -3, 0)
    val resultList = theList.groupBy{ it % 3}
    
    println(resultList)
}

运行以上 Kotlin 程序时,将生成以下输出

{1=[10, 31, 40], 0=[12, 30, 9, -3, 0]}

映射列表元素

我们可以使用map()方法使用提供的函数映射所有元素。

fun main() {
    val theList = listOf(10, 12, 30, 31, 40, 9, -3, 0)
    val resultList = theList.map{ it / 3 }
    
    println(resultList)
}

运行以上 Kotlin 程序时,将生成以下输出

[3, 4, 10, 10, 13, 3, -1, 0]

列表元素分块

我们可以使用chunked()方法从列表中创建给定大小的块。根据列表中元素的总数,最后一个块的元素数量可能与块大小不相同。

fun main() {
    val theList = listOf(10, 12, 30, 31, 40, 9, -3, 0)
    val resultList = theList.chunked(3)
    
    println(resultList)
}

运行以上 Kotlin 程序时,将生成以下输出

[[10, 12, 30], [31, 40, 9], [-3, 0]]

列表元素窗口化

我们可以使用windowed()方法通过在元素集合上移动给定大小的滑动窗口来创建元素范围列表。

fun main() {
    val theList = listOf(10, 12, 30, 31, 40, 9, -3, 0)
    val resultList = theList.windowed(3)
    
    println(resultList)
}

运行以上 Kotlin 程序时,将生成以下输出

[[10, 12, 30], [12, 30, 31], [30, 31, 40], [31, 40, 9], [40, 9, -3], [9, -3, 0]]

默认情况下,滑动窗口每次移动一步,但我们可以通过传递自定义步长值来更改它

fun main() {
    val theList = listOf(10, 12, 30, 31, 40, 9, -3, 0)
    val resultList = theList.windowed(3, 3)
    
    println(resultList)
}

运行以上 Kotlin 程序时,将生成以下输出

[[10, 12, 30], [31, 40, 9]]

Kotlin 可变列表

我们可以使用mutableListOf()创建可变列表,稍后我们可以使用add()在同一列表中添加更多元素,并且可以使用remove()方法从列表中删除元素。

fun main() {
    val theList = mutableSetOf(10, 20, 30)

    theList.add(40)
    theList.add(50)
    println(theList)

    theList.remove(10)
    theList.remove(30)
    println(theList)
}

运行以上 Kotlin 程序时,将生成以下输出

[10, 20, 30, 40, 50]
[20, 40, 50]

测验时间 (面试与考试准备)

问题 1 - 我们可以将可变的 Kotlin 列表设为不可变的吗?

A - 是的

B - 否

答案:A

解释

是的,我们可以通过将可变列表转换为 List 来将其设为不可变。

问题 2 - 我们可以使用 + 运算符添加两个或多个列表并创建一个列表吗?

A - 正确

B - 错误

答案:A

解释

是的,我们可以添加或减去两个 Kotlin 列表并生成第三个列表。

答案:A

解释

get() 方法用于从给定索引获取列表元素。

广告