一、List 概述
-
List 是一個不可變的有序集合,一旦創建就不能修改其內容,即不能添加、刪除、更改元素
-
List 提供了豐富的操作函數來處理數據
二、創建 List
1、基礎創建
- 通過 listOf 函數創建(推薦)
// 創建一個 List,包含 3 個元素
val fruitList = listOf("Apple", "Banana", "Orange")println("fruitList: $fruitList")
# 輸出結果fruitList: [Apple, Banana, Orange]
- 通過 List 構造函數創建
// 創建一個 List,包含 5 個元素,基于索引計算每個元素的值
val numberList = List(5) { it * 2 }// 創建一個 List,包含 3 個元素,每個元素都是 "Kotlin"
val repeatList = List(3) { "Kotlin" }// 創建一個 List,包含 5 個元素,每個元素都是 Unit
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) // 類型推斷為 List<Any>
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、基礎訪問
- 通過
[]
操作符與 get 方法訪問
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: null
result4: 默認顏色
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: null
result2: null
result3: null
result4: 默認顏色
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: green
result2: blue
五、List 遍歷
1、for 循環(推薦)
- 遍歷元素
val list = listOf("Apple", "Banana", "Orange")for (item in list) {println(item)
}
# 輸出結果Apple
Banana
Orange
- 遍歷索引
val list = listOf("Apple", "Banana", "Orange")for (i in list.indices) {println("Index $i: ${list[i]}")
}
# 輸出結果Index 0: Apple
Index 1: Banana
Index 2: Orange
2、使用 forEach 方法(推薦)
val list = listOf("Apple", "Banana", "Orange")list.forEach { println(it) }
# 輸出結果Apple
Banana
Orange
val list = listOf("Apple", "Banana", "Orange")list.forEach { item ->println(item)
}
# 輸出結果Apple
Banana
Orange
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))
}
# 輸出結果Apple
Banana
Orange