一、List 概述
-
List 是一个不可变的有序集合,一旦创建就不能修改其内容,即不能添加、删除、更改元素
-
List 提供了丰富的操作函数来处理数据
二、创建 List
1、基础创建
- 通过 listOf 函数创建(推荐)
val fruitList = listOf(\"Apple\", \"Banana\", \"Orange\")println(\"fruitList: $fruitList\")
# 输出结果fruitList: [Apple, Banana, Orange]
- 通过 List 构造函数创建
val numberList = List(5) { it * 2 }val repeatList = List(3) { \"Kotlin\" }val testList = List(5) {}println(\"numberList: $numberList\")println(\"repeated: $repeatList\")println(\"testList: $testList\")
# 输出结果numberList: [0, 2, 4, 6, 8]repeated: [Kotlin, Kotlin, Kotlin]
2、创建空 List
- 通过 emptyList 函数创建
val emptyList1 = emptyList<String>()println(\"emptyList1: $emptyList1\")
# 输出结果emptyList1: []
- 通过 listOf 函数创建
val emptyList2 = listOf<String>()println(\"emptyList2: $emptyList2\")
# 输出结果emptyList2: []
- 通过 List 构造函数创建
val emptyList3 = List(0) { it }println(\"emptyList3: $emptyList3\")
# 输出结果emptyList3: []
三、List 核心特性
1、类型推断
- 明确类型
val stringList1 = listOf<String>(\"A\", \"B\")
val stringList2 = listOf(\"A\", \"B\")
- 类型推断
val anyList = listOf(1, \"test\", true)
2、不可变性
val fruitList = listOf(\"Apple\", \"Banana\", \"Orange\")fruitList[0] = \"Watermelon\"
# 输出结果(编译错误)Kotlin: Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: public inline operator fun kotlin.text.StringBuilder /* = java.lang.StringBuilder */.set(index: Int, value: Char): Unit defined in kotlin.textKotlin: No set method providing array access
val fruitList = listOf(\"Apple\", \"Banana\", \"Orange\")fruitList.add(\"Watermelon\")
# 输出结果(编译错误)Kotlin: Unresolved reference: add
四、List 元素访问
1、基础访问
val colors = listOf(\"红\", \"绿\", \"蓝\")val first = colors[0]val second = colors.get(1)println(\"first: $first\")println(\"second: $second\")
val colors = listOf(\"红\", \"绿\", \"蓝\")val result = colors[10]println(\"result: $result\")
# 输出结果java.lang.ArrayIndexOutOfBoundsException: Index 10 out of bounds for length 3
val colors = listOf(\"红\", \"绿\", \"蓝\")val result = colors.get(10)println(\"result: $result\")
# 输出结果java.lang.ArrayIndexOutOfBoundsException: Index 10 out of bounds for length 3
2、安全访问
(1)基本介绍
方法 |
说明 |
firstOrNull |
返回 List 的第一个元素,如果 List 为空则返回 null |
lastOrNull |
返回 List 的最后一个元素,如果 List 为空则返回 null |
getOrNull |
返回指定索引的元素,如果索引超出范围则返回 null |
getOrElse |
返回指定索引的元素,如果索引超出范围则返回默认值 |
(2)演示
val colors = listOf(\"红\", \"绿\", \"蓝\")val result1 = colors.firstOrNull()val result2 = colors.lastOrNull()val result3 = colors.getOrNull(5)val result4 = colors.getOrElse(5) { \"默认颜色\" }println(\"result1: $result1\")println(\"result2: $result2\")println(\"result3: $result3\")println(\"result4: $result4\")
# 输出结果result1: 红result2: 蓝result3: nullresult4: 默认颜色
val colors = emptyList<String>()val result1 = colors.firstOrNull()val result2 = colors.lastOrNull()val result3 = colors.getOrNull(5)val result4 = colors.getOrElse(5) { \"默认颜色\" }println(\"result1: $result1\")println(\"result2: $result2\")println(\"result3: $result3\")println(\"result4: $result4\")
# 输出结果result1: nullresult2: nullresult3: nullresult4: 默认颜色
3、条件检索
val colors = listOf(\"red\", \"green\", \"blue\", \"yellow\")val result1 = colors.first { it.length >= 5 }val result2 = colors.last { it.length == 4 }println(\"result1: $result1\")println(\"result2: $result2\")
# 输出结果result1: greenresult2: blue
五、List 遍历
1、for 循环(推荐)
- 遍历元素
val list = listOf(\"Apple\", \"Banana\", \"Orange\")for (item in list) { println(item)}
# 输出结果AppleBananaOrange
- 遍历索引
val list = listOf(\"Apple\", \"Banana\", \"Orange\")for (i in list.indices) { println(\"Index $i: ${list[i]}\")}
# 输出结果Index 0: AppleIndex 1: BananaIndex 2: Orange
2、使用 forEach 方法(推荐)
val list = listOf(\"Apple\", \"Banana\", \"Orange\")list.forEach { println(it) }
# 输出结果AppleBananaOrange
val list = listOf(\"Apple\", \"Banana\", \"Orange\")list.forEach { item -> println(item)}
# 输出结果AppleBananaOrange
3、使用 forEachIndexed 方法(推荐)
val colors = listOf(\"红\", \"绿\", \"蓝\")colors.forEachIndexed { index, item -> println(\"Index $index: $item\")}
# 输出结果Index 0: 红Index 1: 绿Index 2: 蓝
4、使用迭代器
val colors = listOf(\"红\", \"绿\", \"蓝\")val iterator = colors.iterator()while (iterator.hasNext()) { println(iterator.next())}
# 输出结果红绿蓝
5、使用 withIndex 方法
val colors = listOf(\"红\", \"绿\", \"蓝\")for ((index, value) in colors.withIndex()) { println(\"$index: $value\")}
# 输出结果0: 红1: 绿2: 蓝
6、使用 List.size
+ get 方法
val fruitList = listOf(\"Apple\", \"Banana\", \"Orange\")for (i in 0 until fruitList.size) { println(fruitList.get(i))}
# 输出结果AppleBananaOrange