玖叶教程网

前端编程开发入门

Kotlin集合(kotlin listof)

与?多数语?不同,Kotlin 区分可变集合和不可变集合(lists、sets、maps 等)。精确控制什么时候集合可编辑有助于消除 bug 和设计良好的 API。

预先了解?个可变集合的只读 视图 和?个真正的不可变集合之间的区别是很重要的。它们都容易创建,但类型系统不能表达它们的差别,所以由你来跟踪

(是否相关)。

Kotlin 的 List<out T> 类型是?个提供只读操作如 size 、get 等的接?。和 Java 类似,它继承? Collection<T> 进?继承?

Iterable<T> 。改变 list 的?法是由 MutableList<T> 加?的。这?模式同样适?于 Set<out T>/MutableSet<T> 及 Map<K, out

V>/MutableMap<K, V> 。

我们可以看下 list 及 set 类型的基本?法:

val numbers: MutableList<Int> = mutableListOf(1, 2, 3)

val readOnlyView: List<Int> = numbers

println(numbers) // 输出 "[1, 2, 3]"

numbers.add(4)

println(readOnlyView) // 输出 "[1, 2, 3, 4]"

readOnlyView.clear() // -> 不能编译

val strings = hashSetOf("a", "b", "c", "c")

assert(strings.size == 3)

Kotlin 没有专?的语法结构创建 list 或 set。 要?标准库的?法,如 listOf() 、 mutableListOf() 、 setOf() 、 mutableSetOf() 。 在?性能关

键代码中创建 map 可以??个简单的惯?法来完成:mapOf(a to b, c to d)

注意上?的 readOnlyView 变量(译者注:与对应可变集合变量 numbers )指向相同的底层 list 并会随之改变。 如果?个 list 只存在只读引?,我们可

以考虑该集合完全不可变。创建?个这样的集合的?个简单?式如下:

val items = listOf(1, 2, 3)

?前 listOf ?法是使? array list 实现的,但是未来可以利?它们知道??不能变的事实,返回更节约内存的完全不可变的集合类型。

注意这些类型是协变的。这意味着,你可以把?个 List<Rectangle> 赋值给 List<Shape> 假定 Rectangle 继承? Shape。对于可变集合类型这是

不允许的,因为这将导致运?时故障。

有时你想给调?者返回?个集合在某个特定时间的?个快照, ?个保证不会变的:

class Controller {

private val _items = mutableListOf<String>()

val items: List<String> get() = _items.toList()

}

这个 toList 扩展?法只是复制列表项,因此返回的 list 保证永远不会改变。

List 和 set 有很多有?的扩展?法值得熟悉:

val items = listOf(1, 2, 3, 4)

items.first() == 1

items.last() == 4

items.filter { it % 2 == 0 } // 返回 [2, 4]

val rwList = mutableListOf(1, 2, 3)

rwList.requireNoNulls() // 返回 [1, 2, 3]

if (rwList.none { it > 6 }) println("No items above 6") // 输出“No items above 6”

val item = rwList.firstOrNull()

…… 以及所有你所期望的实??具,例如 sort、zip、fold、reduce 等等。

Map 遵循同样模式。它们可以容易地实例化和访问,像这样:

val readWriteMap = hashMapOf("foo" to 1, "bar" to 2)

println(readWriteMap["foo"]) // 输出“1”

val snapshot: Map<String, Int> = HashMap(readWriteMap)

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言