一、MutableList 概述
-
MutableList 是 Kotlin 中可變的列表接口,它繼承自 List 接口并添加了修改列表內容的方法
-
MutableList 允許添加、刪除、更新元素
二、創建 MutableList
1、基礎創建
- 使用 mutableListOf 函數
// 創建一個 MutableList,包含 4 個元素
val nums = mutableListOf(1, 2, 3, 4)println("nums: $nums")
# 輸出結果nums: [1, 2, 3, 4]
- 使用 MutableList 函數
// 創建一個 MutableList,包含 5 個元素,基于索引計算每個元素的值
val nums = MutableList(5) { it * 2 }println("nums: $nums")
# 輸出結果nums: [0, 2, 4, 6, 8]
- 使用 ArrayList 構造函數
val nums = ArrayList<Int>()
nums.add(1)
nums.add(2)
nums.add(3)println("nums: $nums")
# 輸出結果nums: [1, 2, 3]
2、創建空 MutableList
- 使用 mutableListOf 函數
val emptyList = mutableListOf<String>()println("emptyList: $emptyList")
# 輸出結果emptyList: []
- 使用 MutableList 函數
val emptyList = MutableList(0) { it }println("emptyList: $emptyList")
# 輸出結果emptyList: []
- 使用 ArrayList 構造函數
// 指定初始容量為 5
val nums1 = ArrayList<Int>(5)println("nums1: $nums1")val nums2 = ArrayList<Int>()println("nums2: $nums2")
# 輸出結果nums1: []
nums2: []
三、MutableList 添加元素
- 添加單個元素
val fruits = mutableListOf("Apple", "Banana")println("fruits: $fruits")// 在末尾添加元素
fruits.add("Orange")println("fruits: $fruits")// 在指定位置添加元素
fruits.add(1, "Grape")println("fruits: $fruits")
# 輸出結果fruits: [Apple, Banana]
fruits: [Apple, Banana, Orange]
fruits: [Apple, Grape, Banana, Orange]
- 添加多個元素
val fruits = mutableListOf("Apple", "Banana")println("fruits: $fruits")// 在末尾添加多個元素
fruits.addAll(listOf("Mango", "Peach"))println("fruits: $fruits")// 在指定位置添加多個元素
fruits.addAll(2, listOf("Lemon", "Kiwi"))println("fruits: $fruits")
# 輸出結果fruits: [Apple, Banana]
fruits: [Apple, Banana, Mango, Peach]
fruits: [Apple, Banana, Lemon, Kiwi, Mango, Peach]
四、MutableList 刪除元素
- 按值刪除元素
val nums = mutableListOf(1, 2, 3, 4, 5, 2)println("nums: $nums")nums.remove(2)println("nums: $nums")
# 輸出結果nums: [1, 2, 3, 4, 5, 2]
nums: [1, 3, 4, 5, 2]
- 按索引刪除元素
val nums = mutableListOf(1, 2, 3, 4, 5, 2)println("nums: $nums")nums.removeAt(2)println("nums: $nums")
# 輸出結果nums: [1, 2, 3, 4, 5, 2]
nums: [1, 2, 4, 5, 2]
- 刪除所有匹配元素
val nums = mutableListOf(1, 2, 3, 4, 5, 2)println("nums: $nums")nums.removeAll(listOf(4, 2))println("nums: $nums")
# 輸出結果nums: [1, 2, 3, 4, 5, 2]
nums: [1, 3, 5]
- 刪除所有元素
val nums = mutableListOf(1, 2, 3, 4, 5, 2)println("nums: $nums")nums.clear()println("nums: $nums")
# 輸出結果nums: [1, 2, 3, 4, 5, 2]
nums: []
- 保留指定元素,刪除其余元素
val letters = mutableListOf('a', 'b', 'c', 'd')println("letters: $letters")letters.retainAll(listOf('a', 'c'))println("letters: $letters")
# 輸出結果letters: [a, b, c, d]
letters: [a, c]
五、MutableList 訪問元素
1、基礎訪問
- 使用
[]
操作符與 get 方法
val colors = mutableListOf("紅", "綠", "藍")val first = colors[0]
val second = colors.get(1)println("first: $first")
println("second: $second")
# 輸出結果first: 紅
second: 綠
- 它們都會拋出索引越界異常
val colors = mutableListOf("紅", "綠", "藍")val result = colors[10]println("result: $result")
# 輸出結果java.lang.IndexOutOfBoundsException: Index 10 out of bounds for length 3
val colors = mutableListOf("紅", "綠", "藍")val result = colors.get(10)println("result: $result")
# 輸出結果java.lang.IndexOutOfBoundsException: Index 10 out of bounds for length 3
2、安全訪問
(1)基本介紹
方法 | 說明 |
---|---|
firstOrNull | 返回 List 的第一個元素,如果 List 為空則返回 null |
lastOrNull | 返回 List 的最后一個元素,如果 List 為空則返回 null |
getOrNull | 返回指定索引的元素,如果索引超出范圍則返回 null |
getOrElse | 返回指定索引的元素,如果索引超出范圍則返回默認值 |
(2)演示
val colors = mutableListOf("紅", "綠", "藍")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 = mutableListOf<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 = mutableListOf("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
六、MutableList 修改元素
- 使用
[]
操作符
val items = mutableListOf("one", "two", "three")println("items: $items")items[1] = "2"println("items: $items")
# 輸出結果items: [one, two, three]
items: [one, 2, three]
- 使用 set 方法
val items = mutableListOf("one", "two", "three")println("items: $items")items.set(2, "3")println("items: $items")
# 輸出結果items: [one, two, three]
items: [one, two, 3]
七、MutableList 遍歷元素
1、for 循環(推薦)
- 遍歷元素
val items = mutableListOf("one", "two", "three")for (item in items) {println(item)
}
# 輸出結果one
two
three
- 遍歷索引
val items = mutableListOf("one", "two", "three")for (i in items.indices) {println("Index $i: ${items[i]}")
}
# 輸出結果Index 0: one
Index 1: two
Index 2: three
2、使用 forEach 方法(推薦)
val items = mutableListOf("one", "two", "three")items.forEach { println(it) }
# 輸出結果one
two
three
val items = mutableListOf("one", "two", "three")items.forEach { item ->println(item)
}
# 輸出結果one
two
three
3、使用 forEachIndexed 方法(推薦)
val items = mutableListOf("one", "two", "three")items.forEachIndexed { index, item ->println("Index $index: $item")
}
# 輸出結果Index 0: one
Index 1: two
Index 2: three
4、使用迭代器
val items = mutableListOf("one", "two", "three")val iterator = items.iterator()while (iterator.hasNext()) {println(iterator.next())
}
# 輸出結果one
two
three
5、使用 withIndex 方法
val colors = mutableListOf("紅", "綠", "藍")for ((index, value) in colors.withIndex()) {println("$index: $value")
}
# 輸出結果0: 紅
1: 綠
2: 藍
6、使用 List.size
+ get 方法
val fruitList = mutableListOf("Apple", "Banana", "Orange")for (i in 0 until fruitList.size) {println(fruitList.get(i))
}
# 輸出結果Apple
Banana
Orange