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

Kotlin 数据容器 - List(List 概述、创建 List、List 核心特性、List 元素访问、List 遍历)

一、List 概述

  1. List 是一个不可变的有序集合,一旦创建就不能修改其内容,即不能添加、删除、更改元素

  2. List 提供了丰富的操作函数来处理数据


二、创建 List

1、基础创建
  1. 通过 listOf 函数创建(推荐)
// 创建一个 List,包含 3 个元素
val fruitList = listOf("Apple", "Banana", "Orange")println("fruitList: $fruitList")
# 输出结果fruitList: [Apple, Banana, Orange]
  1. 通过 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
  1. 通过 emptyList 函数创建
val emptyList1 = emptyList<String>()println("emptyList1: $emptyList1")
# 输出结果emptyList1: []
  1. 通过 listOf 函数创建
val emptyList2 = listOf<String>()println("emptyList2: $emptyList2")
# 输出结果emptyList2: []
  1. 通过 List 构造函数创建
val emptyList3 = List(0) { it }println("emptyList3: $emptyList3")
# 输出结果emptyList3: []

三、List 核心特性

1、类型推断
  1. 明确类型
val stringList1 = listOf<String>("A", "B")
// 等同于val stringList2 = listOf("A", "B")
  1. 类型推断
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 循环(推荐)
  1. 遍历元素
val list = listOf("Apple", "Banana", "Orange")for (item in list) {println(item)
}
# 输出结果Apple
Banana
Orange
  1. 遍历索引
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
http://www.lryc.cn/news/599306.html

相关文章:

  • STM32与ADS1220实现多通道数据采集的完整分析和源程序
  • 【WPS】office邮件合并,怎么将数据源excel中的下一条拼接在文档中的下一个位置
  • 目标导向的强化学习:问题定义与 HER 算法详解—强化学习(19)
  • Android Kotlin 协程全面指南
  • C++ : list的模拟
  • 【数据结构】长幼有序:树、二叉树、堆与TOP-K问题的层次解析(含源码)
  • 安全风险监测平台:被动应对向主动预防的转变
  • Nginx 安装与 HTTPS 配置指南:使用 OpenSSL 搭建安全 Web 服务器
  • 【IDEA】idea怎么修改注册的用户名称?
  • OAuth 2.0 安全最佳实践 (RFC 9700) password 授权类型已经不推荐使用了,将在计划中移除
  • 关于新学C++编程Visual Studio 2022开始,使用Cmake工具构建Opencv和SDK在VS里编译项目开发简介笔记
  • 《汇编语言:基于X86处理器》第9章 编程练习
  • vscode 登录ssh记住密码直接登录设置
  • vscode 字体的跟换
  • Web前端:JavaScript Math选字游戏 斯特鲁普效应测试
  • 短剧广告变现系统全栈开发指南:从架构设计到高并发实践
  • 动态规划Day1学习心得
  • RocketMQ常见问题梳理
  • kafka如何保证数据不丢失
  • 2025年7月25日训练日志
  • Elasticsearch-8.17.0 centos7安装
  • Flink 自定义类加载器和子优先类加载策略
  • 第一章:Go语言基础入门之流程控制
  • k8s-MongoDB 副本集部署
  • 呼叫中心系统管理权限功能配置
  • gig-gitignore工具实战开发(四):使用ai辅助生成gitignore
  • 熵与交叉熵:从信息论到机器学习的「不确定性」密码
  • 有关于k8s中的CSI和CRI的有关知识
  • [硬件电路-85]:一款高集成度热电制冷器(TEC)控制器芯片ADN8835ACPZ
  • 【Docker项目实战】在Docker环境下部署go-file文件分享工具