提供方: JetBrains 学院
您已经对集合、它们的不同类型(集合、列表、映射)以及变体(可变、不可变)有了基本的了解。在本主题中,我们将更深入地了解一种特定类型。 List 。
介绍
List 是一种 不可变 集合。初始化后,其大小无法更改。这种类型允许元素重复,并按特定顺序存储元素。
假设我们要保存去年驾驶过的车辆信息。让我们借助 List 来实现:
val cars = listOf<String>("BMW", "Honda", "Mercedes")
println(cars) // output: [BMW, Honda, Mercedes]
理论上,我们可以使用 MutableList 来保存这类信息:
val cars = mutableListOf<String>("BMW", "Honda", "Mercedes")
println(cars) // output: [BMW, Honda, Mercedes]
然而,这样做并不好,因为任何人都可以随时更改 MutableList 的内容:
cars[0] = "Renault"
println(cars) // output: [Renault, Honda, Mercedes]
如果你希望列表内容保持不变,这可能会是个问题。 List 是 不可变的 ,所以我们的内容不会被改变。如果你尝试修改列表中的内容,你会收到一个错误:
val cars = listOf<String>("BMW", "Honda", "Mercedes")
cars[0] = "Renault" // Error
初始化
List 是一种 泛型 类型。正如你从前面的例子中看到的,你可以使用 listOf<E> 来初始化它,其中 E 是列表中包含的元素的类型:
val textUsMethod = listOf<String>("SMS", "Email")
类型也可以从上下文中推导出来:
val textUsMethod = listOf("SMS", "Email")
如果需要一个空列表,可以使用 emptyList 方法:
val staff = emptyList<String>()
println(staff) // output: []
创建列表的另一种方法是调用构建器函数 – buildList() 。
val names = listOf<String>("Emma", "Kim")
val list = buildList {
add("Marta")
addAll(names)
add("Kira")
}
println(list) // output: [Marta, Emma, Kim, Kira]
方法和属性
让我们回顾一下 List 的属性和方法:
size返回List的大小。isEmpty()显示列表是否为空。
此外, List 还有一个 get(index) 方法,它会返回指定位置的 元素 。你也可以使用 [index] 来获取 元素 。记住,索引从零开始!
假设你有一份派对宾客名单:
val partyList = listOf("Fred", "Emma", "Isabella", "James", "Olivia")
我们如何知道何时开始派对?让我们使用 isEmpty 方法检查客人是否已到场。如果派对现场不为空,我们想知道有多少位客人,并找出谁能获得第一杯迎宾鸡尾酒!
我们将得到类似这样的结果:
if (!partyList.isEmpty()) {
val size = partyList.size
val whoIsFirst = partyList[0]
println("The party will not be lonesome! We already got $size people. And $whoIsFirst was the first to arrive today!")
// The party will not be lonesome! We already got 5 people. And Fred was the first to arrive today!
}
让我们看看如何使用其他熟悉的方法:
indexOf(element)返回指定元素首次出现的索引。如果列表中不存在该元素,则函数返回-1。contains(element)如果指定的元素在列表中,则返回true如果不在列表中,则返回false。
艾玛认为她有权先喝一杯鸡尾酒。但事实果真如此吗?让我们来验证一下:
println("Emma came in ${partyList.indexOf("Emma") + 1}") // Emma came in 2
看来艾玛没得第一,她得了第二。现在,詹姆斯(像往常一样)想知道伊莎贝拉来没来:
println("Guys, is it true that Isabella came? It's ${partyList.contains("Isabella")}") // Guys, is it true that Isabella came? It's true
还有许多其他有用的 List 方法:请访问 kotlinlang.org 并熟悉它们!
遍历元素
您可以使用 for 循环遍历 List 中的元素。我们来看一个例子:
val participants = listOf("Fred", "Emma", "Isabella")
for (participant in participants) {
println("Hello $participant!")
}
// Hello Fred!
// Hello Emma!
// Hello Isabella!
在这个例子中,我们遍历 participants 并将它们打印到控制台。
成语
List 是编程中非常常见的数据结构。不出所料,它也有自己的一套编程惯例。
您已经了解了几种创建 List 的方法。和往常一样,Kotlin 社区建议使用最简洁的方法。您可以在 kotlinlang.org 上找到它。
val list = listOf("a", "b", "c")
结论
现在您了解了 Kotlin 中 List 和 MutableList 的主要区别。简单回顾一下:当您不希望内容发生变化时,请使用 List 。
你知道如何初始化列表、检查列表是否为空、检查列表是否包含特定元素、通过索引获取元素或找到元素的索引,以及如何计算列表的大小。你可以使用 for 循环遍历 List 的元素。这并非全部,但足以让你入门!接下来,我们来做一些练习。
424 名学习者喜欢这篇理论文章, 4 名学习者不喜欢。 你觉得呢?
报告拼写错误