Kotlin学习笔记(三) 集合(上)

集合

一、概述
  • 集合类型:

List 有序集合。可通过索引访问。

Set 唯一元素的集合。无重复对象。

Map(字典)是一组键值对。键是唯一的。

  • 接口类型

一个 只读 接口,提供访问集合元素的操作。

一个 可变 接口,通过写操作扩展相应的只读接口:添加、删除、更新。

更改集合不需要它以var定义:写操作修改同一个可变集合对象,因此引用不会改变。

Kotlin集合接口关系:

Kotlin学习笔记(三) 集合(上)_第1张图片

  • List

索引:0 ~ list.size - 1

如果两个List在相同位置具有相同大小和相同结构的元素,则它们相等。

data class Person(var name: String, var age: Int)

fun main() {
   
    val bob = Person("Bob", 31)
    val people = listOf<Person>(Person("Adam", 20), bob, bob)
    val people2 = listOf<Person>(Person("Adam", 20), Person("Bob", 31), bob)
    println(people == people2)  // true
    bob.age = 32
    println(people == people2)  // false
}

ListArray的区别:

Array的大小在初始化时定义,无法改变;List没有预定义的大小,写操作的结果可以更改List的大小。

List 的默认实现是ArrayList

  • Set

存储唯一的元素。null元素也是唯一的。当两个 set 具有相同的大小并且对于一个 set 中的每个元素都能在另一个 set 中存在相同元素,则两个 set 相等。

Set的默认实现—LinkedHashSet—保留元素的插入顺序。可以调用first()last()函数返回可预测结果。

另一种实现—HashSet—不声明元素的顺序。

  • Map

Map不是Collection接口的继承者。

键是唯一的,不同的键可以与相同的值配对。

无论键值对的顺序如何,包含相同键值对的两个 Map 是相等的。

val numbersMap = mapOf("key1" to 1, "key2" to 2, "key3" to 3, "key4" to 1)    
val anotherMap = mapOf("key2" to 2, "key1" to 1, "key4" to 1, "key3" to 3)

numberMap == anotherMap  // true

MutableMap是一个具有写操作的 Map 接口。

二、构造集合
  • 由元素构造

listOf()setOf()mutableListOf()mutableSetOf()

如果以都好分隔的集合元素列表作为参数,编译器会自动检测元素类型。创建空集合时,必须指定类型。

val numbersList = listOf("one", "two", "three", "four")
val emptySet = mutableSetOf<String>()

mapOf()mutableMapOf()

映射的键和值作为Pair对象传递(通常使用中缀函数to创建)。

val numbersMap = mapOf(Pair("key1", 1), "key2" to 2, "key3" to 3, "key4" to 1)

to 符号创建了一个短时存活的 Pair 对象,为避免过多的内存使用,可以创建可写Map并使用写入操作填充。

val numbersMap = mutableMapOf<String, Int>().apply {
    this["one"] = 1; this["two"] = 2 }
  • 空集合

emptyList()emptySet()emptyMap()

  • List的初始化函数

List有一个接受List大小与初始化函数的构造函数。

val doubled = List(3) {
    it * 2 }  // [0, 2, 4]
  • 具体类型构造函数
val linkedList = LinkedList<String>(listOf("one", "two", "three"))
val presizedSet = HashSet<Int>(32)
  • 复制
val sourceList = mutableListOf(1, 2, 3)
val copyList = sourceList.toMutableList()
val readOnlyList = sourceList.toList()

copyList.add(4)
// readOnlyList.add(4) // 编译异常
println(copyList)      // [1, 2, 3, 4]
println(readOnlyList)  // [1, 2, 3]
val sourceList = mutableListOf(1, 2, 3)    
val copySet = sourceList.toMutableSet()
copySet.add(3)
copySet.add(4)    
println(copySet)  // [1, 2, 3, 4]

可以创建对同一集合实例的新引用。使用现有集合初始化集合变量时,将创建新引用。 因此,当通过引用更改集合实例时,更改将反映在其所有引用中。

val sourceList = mutableListOf(1, 2, 3)
val referenceList = sourceList
referenceList.add(4)
println(sourceList.size)  // 4

集合的初始化可用于限制其可变性。

val sourceList = mutableListOf(1, 2, 3)
val referenceList: List<Int> = sourceList
//referenceList.add(4)  // 编译错误
sourceList.add(4)
println(referenceList)  // 显示 sourceList 当前状态
  • 调用其他集合的函数

过滤列表会创建与过滤器匹配的新元素列表:

val numbers = listOf(1, 2, 3, 4)
val odds = numbers.filter {
    it % 2 != 0 }
println(odds)  // [1, 3]

映射生成转换结果列表:

val numbers = setOf(1, 

你可能感兴趣的:(Kotlin基础,android,kotlin)