当前位置: 首页 > news >正文

Kotlin 数据容器 - MutableList(MutableList 概述、MutableList 增删改查、MutableList 遍历元素)

一、MutableList 概述

  1. MutableList 是 Kotlin 中可变的列表接口,它继承自 List 接口并添加了修改列表内容的方法

  2. MutableList 允许添加、删除、更新元素


二、创建 MutableList

1、基础创建
  1. 使用 mutableListOf 函数
// 创建一个 MutableList,包含 4 个元素
val nums = mutableListOf(1, 2, 3, 4)println("nums: $nums")
# 输出结果nums: [1, 2, 3, 4]
  1. 使用 MutableList 函数
// 创建一个 MutableList,包含 5 个元素,基于索引计算每个元素的值
val nums = MutableList(5) { it * 2 }println("nums: $nums")
# 输出结果nums: [0, 2, 4, 6, 8]
  1. 使用 ArrayList 构造函数
val nums = ArrayList<Int>()
nums.add(1)
nums.add(2)
nums.add(3)println("nums: $nums")
# 输出结果nums: [1, 2, 3]
2、创建空 MutableList
  1. 使用 mutableListOf 函数
val emptyList = mutableListOf<String>()println("emptyList: $emptyList")
# 输出结果emptyList: []
  1. 使用 MutableList 函数
val emptyList = MutableList(0) { it }println("emptyList: $emptyList")
# 输出结果emptyList: []
  1. 使用 ArrayList 构造函数
// 指定初始容量为 5
val nums1 = ArrayList<Int>(5)println("nums1: $nums1")val nums2 = ArrayList<Int>()println("nums2: $nums2")
# 输出结果nums1: []
nums2: []

三、MutableList 添加元素

  1. 添加单个元素
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]
  1. 添加多个元素
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 删除元素

  1. 按值删除元素
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]
  1. 按索引删除元素
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]
  1. 删除所有匹配元素
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]
  1. 删除所有元素
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: []
  1. 保留指定元素,删除其余元素
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 修改元素

  1. 使用 [] 操作符
val items = mutableListOf("one", "two", "three")println("items: $items")items[1] = "2"println("items: $items")
# 输出结果items: [one, two, three]
items: [one, 2, three]
  1. 使用 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 循环(推荐)
  1. 遍历元素
val items = mutableListOf("one", "two", "three")for (item in items) {println(item)
}
# 输出结果one
two
three
  1. 遍历索引
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
http://www.dtcms.com/a/320790.html

相关文章:

  • 【JVM】流程汇总
  • OpenSCA开源社区每日安全漏洞及投毒情报资讯—2025年8月7日
  • OCC 主要库和功能模块
  • AI对互联网公司职位改变?
  • Android 系统的基本安全属性
  • 恒科持续低迷:新能源汽车股下跌成拖累,销量担忧加剧
  • ZCC3094--30V,-500mA超低噪声线性稳压电源
  • HFSS许可证常见问题及解决方案
  • 分享超图提供的、很不错的WebGIS学习资源
  • 分布式微服务--GateWay的断言以及如何自定义一个断言
  • 【昇腾】基于RK3588 arm架构Ubuntu22.04系统上适配Atlas 200I A2加速模块安装EP模式下的驱动固件包_20250808
  • simulink tlc如何通过tlc写数据入文件
  • 三种 SSE 对比
  • 秋招笔记-8.8
  • Django模型开发全解析:字段、元数据与继承的实战指南
  • C++简单项目跟练【通讯录管理系统000】
  • 持中文的 TXT 合并 PDF 工具 —— GUI + ReportLab 实战
  • 基于定制开发开源AI智能名片S2B2C商城小程序的定价策略与市场定位研究
  • UniApp Vue3 TypeScript项目中使用xgplayer播放m3u8视频的显示问题
  • AI学习笔记三十五:实时传输视频
  • webrtc弱网-EncodeUsageResource类源码分析及算法原理
  • Baumer相机如何通过YoloV8深度学习模型实现高速公路车辆的实时检测计数(C#代码UI界面版)
  • 云原生时代的 Linux:容器、虚拟化与分布式的基石
  • 深入理解VideoToolbox:iOS/macOS视频硬编解码实战指南
  • 微软公布Windows 2030,要彻底淘汰鼠标、键盘
  • token过期为了保证安全,refresh token不过期,那么拿到refresh token就可以获取token,不还是不安全吗
  • 今日行情明日机会——20250808
  • 座舱HMI软件开发架构:核心功能与案例解析
  • 【重学MySQL】事务隔离
  • OLE延时剪切板技术深度解析:从资源管理器支持到远程桌面文件同步 含c++ demo代码 亲测可用