List 有序集合。可通过索引访问。
Set 唯一元素的集合。无重复对象。
Map(字典)是一组键值对。键是唯一的。
一个 只读 接口,提供访问集合元素的操作。
一个 可变 接口,通过写操作扩展相应的只读接口:添加、删除、更新。
更改集合不需要它以var
定义:写操作修改同一个可变集合对象,因此引用不会改变。
Kotlin集合接口关系:
索引: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
}
List
与Array
的区别:
Array
的大小在初始化时定义,无法改变;List
没有预定义的大小,写操作的结果可以更改List
的大小。
List
的默认实现是ArrayList
。
存储唯一的元素。null
元素也是唯一的。当两个 set
具有相同的大小并且对于一个 set
中的每个元素都能在另一个 set
中存在相同元素,则两个 set
相等。
Set
的默认实现—LinkedHashSet
—保留元素的插入顺序。可以调用first()
和last()
函数返回可预测结果。
另一种实现—HashSet
—不声明元素的顺序。
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大小与初始化函数的构造函数。
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,