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.pswp.cn/diannao/95329.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/95329.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库规范化:消除冗余与异常的核心法则

规范化&#xff08;Normalization&#xff09; 是数据库设计中的核心流程&#xff0c;旨在通过结构化表与字段&#xff0c;消除数据冗余和避免数据异常&#xff08;插入/更新/删除异常&#xff09;&#xff0c;同时确保数据依赖合理。其核心方法是将大表拆分为多个小表&#xf…

AI绘画与摄影新纪元:ChatGPT+Midjourney+文心一格 共绘梦幻世界

文章目录一、AI艺术的新时代二、ChatGPT&#xff1a;创意的引擎与灵感的火花三、Midjourney&#xff1a;图像生成的魔法与技术的奇迹四、文心一格&#xff1a;艺术的升华与情感的共鸣五、融合创新&#xff1a;AI绘画与摄影实战的无限可能六、应用场景与实践案例AI艺术的美好未来…

如何衡量需求的紧急程度

衡量需求的紧急程度&#xff0c;其核心在于建立一套客观、量化、且基于商业影响的评估框架&#xff0c;从而将干系人主观的“紧迫感”&#xff0c;转化为团队可进行理性决策的“优先级数据”。一套行之有效的紧急程度衡量体系&#xff0c;其构建必须综合考量五大关键维度&#…

setInterval的任务正在执行时,setTimeout的任务会等待前者完成后再执行,这样会造成2个计时器的时间精度出错?

setInterval&#xff0c;setTimeout 2种计时器在同一个页面处理任务&#xff0c;想看下精度用时情况。setInterval的任务正在执行时&#xff0c;setTimeout的任务会等待前者完成后再执行&#xff0c;这样会造成2个计时器的时间精度出错&#xff1f;本来settimeout启动0.5秒&…

DeepSeek-R1-0528 推理模型完整指南:领先开源推理模型的运行平台与选择建议

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

【AI实战】从零开始微调Qwen2-VL模型:打造制造业智能安全巡检系统

【AI实战】从零开始微调Qwen2-VL模型&#xff1a;打造制造业智能安全巡检系统&#x1f3af; 项目背景与目标&#x1f6e0; 环境准备硬件要求软件环境搭建&#x1f4ca; 数据准备&#xff1a;构建高质量训练集第一步&#xff1a;提取规章制度知识第二步&#xff1a;创建标注数据…

5 重复匹配

在前几章里&#xff0c;我们学习了如何使用各种元字符和特殊的字符集合去匹配单个字符。本章将学习如何匹配多个连续重复出现的字符或字符集合。5.1 有多少个匹配你现在已经学会了正则表达式的模式匹配中的基础知识&#xff0c;但目前所有的例子都有一个非常严重的局限。请大家…

【浏览器兼容性处理】

浏览器兼容性处理是前端开发中重要的一环&#xff0c;指解决不同浏览器&#xff08;或同一浏览器不同版本&#xff09;对HTML、CSS、JavaScript解析执行存在差异&#xff0c;导致页面显示异常或功能失效的问题。以下是常见问题及系统的处理方案&#xff1a; 一、常见兼容性问题…

Android组件化实现方案深度分析

组件化是解决大型应用代码臃肿、耦合严重、编译缓慢、团队协作困难等问题的关键架构手段&#xff0c;其核心在于 模块化拆分、解耦、独立开发和按需集成。 一、 组件化的核心目标与价值 解耦与高内聚&#xff1a; 将庞大单体应用拆分为功能独立、职责单一的模块&#xff08;组件…

外卖:重构餐饮的线上服务密码

外卖不是 “把堂食菜装进盒子送出去”&#xff0c;而是 “用线上化服务重构餐饮与用户连接” 的经营模式 —— 它的核心&#xff0c;是 “让用户在家也能吃到‘像在店里一样好’的体验”。一、外卖的底层逻辑用户点外卖&#xff0c;本质是 “想在家获得‘餐厅级体验’”&#x…

C++——高性能组件

文章目录一、什么是高性能组件1.1 C 中高性能组件的核心设计原则1.2 常见的 C 高性能组件 / 库举例1.3 实现高性能组件的关键工具二、定时器2.1 什么是用户态定时器2.2 为什么要使用用户态定时器2.3 高性能用户态定时器的实现原理2.3.1 训练营2.3.1.1 问题解析2.3.1.2 模拟问答…

【软考中级网络工程师】知识点之 UDP 协议:网络通信中的高效轻骑兵

目录一、UDP 协议简介二、UDP 协议特点2.1 无连接性2.2 不可靠性2.3 面向数据报2.4 低开销2.5 广播支持三、UDP 协议工作原理3.1 UDP 报文格式3.2 UDP 数据传输过程四、UDP 协议应用场景4.1 实时音视频传输4.2 在线游戏4.3 DNS 查询4.4 其他应用场景五、UDP 与 TCP 对比5.1 可靠…

【Node.js从 0 到 1:入门实战与项目驱动】2.1 安装 Node.js 与 npm(Windows/macOS/Linux 系统的安装步骤)

文章目录 第 2 章:环境搭建 —— 准备你的开发工具 2.1 安装 Node.js 与 npm(Windows/macOS/Linux 系统的安装步骤) 一、通用安装前检查 二、Windows 系统安装步骤 方法 1:通过官方安装包(推荐) 方法 2:通过 nvm-windows 管理多版本(进阶) 三、macOS 系统安装步骤 方法…

C语言相关简单数据结构:数据结构概念

目录 1.需要的储备知识 2.数据结构相关概念 2.1 什么是数据结构 什么是数据&#xff1f; 什么是结构&#xff1f; 概念&#xff1a; 总结&#xff1a; 2.2 为什么需要数据结构&#xff1f; 结论&#xff1a; C语⾔语法基础到数据结构与算法&#xff0c;前⾯已经掌握并…

Docker 详细介绍及使用方法

Docker 详细介绍及使用方法 一、Docker 是什么&#xff1f; Docker 是一种开源的应用容器引擎&#xff0c;基于 Go 语言开发并遵从 Apache 2.0 协议开源。它允许开发者将应用程序及其依赖打包到一个轻量级、可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上。Dock…

PHP request文件封装

1.继承FormRequest 其中id是路由传参 name是对象中必填校验<?phpnamespace App\Http\Requests\Admin\User;use Illuminate\Foundation\Http\FormRequest; use Illuminate\Validation\Rule;class user_info_uptRequest extends FormRequest {public function authorize():…

基于跨平台的svg组件编写一个svg编辑器

duxapp 提供了一套跨平台的 SVG 编辑器组件&#xff0c;支持在多种环境中创建和编辑 SVG 图形。该编辑器包含以下核心功能&#xff1a; 插入图片绘制自由路径添加文本创建基本形状&#xff08;矩形、圆形、线条等&#xff09;对元素进行移动、缩放和旋转操作 快速开始 import…

react+echarts实现图表展示的两种方法

前言&#xff1a;reactecharts实现图表展示。1、直接用echarts的插件来实现1&#xff09;安装npm install echarts2&#xff09;使用1、useEffect是react中集合onload/watch监听等方法与一体的hook函数&#xff0c;他的第二个参数是空数组&#xff0c;则等同于onload&#xff0…

Apache 服务器基础配置与虚拟主机部署

Apache 服务器基础配置与虚拟主机部署 Apache 的核心定位与作用&#xff1a; Apache 的核心功能是处理 HTTP 请求并提供 Web 资源&#xff0c;是客户端&#xff08;如浏览器&#xff09;与 Web 服务器之间的 “中间人”&#xff1a; 接收客户端通过 HTTP/HTTPS 协议发送的请求…

线性代数 · 矩阵 | 最小多项式

注&#xff1a;本文为 “矩阵 | 最小多项式” 相关合辑。 略作重排&#xff0c;如有内容异常&#xff0c;请看原文。 最小多项式 橘子蜂蜜 于 2019-05-22 22:48:25 发布 根据哈密顿 - 凯莱&#xff08;Hamilton - Cayley&#xff09;定理&#xff0c;任给数域 PPP 上的一个 …