重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
在kotli.collections包中包含List(有序集合)、Set(无序集合)、Map(健值对)三种集合
公司主营业务:网站制作、成都网站制作、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联推出庆安免费做网站回馈大家。2.val定义的集合,调用集合方法可以添加删除,但是如果重新创建对象,则报错
val numbers = mutableListOf("one", "two", "three", "four")
numbers.add("five") // 这是可以的
//numbers = mutableListOf("six", "seven")// 编译错误
3.Collection
Collection
fun printAll(strings: Collection) {
for (s in strings) print("$s")
println()
}
fun main() {
val stringList= listOf("one", "two", "one")
printAll (stringList)
val stringSet= setOf("one", "two", "three")
printAll(stringSet)
}
MutableCollection 是一个具有写操作的 Collection 接口,例如 add 以及 remove 。
fun List.getShortWordsTo(shortWords: MutableList, maxLength: Int) {
this.filterTo(shortWords) { it.length <= maxLength }
// throwing away the articles val articles = setOf("a", "A", "an", "An", "the", "The")
shortWords-= articles
}
fun main() {
val words= "A long time ago in a galaxy far far away".split(" ")
val shortWords= mutableListOf()
words.getShortWordsTo (shortWords,3)
println(shortWords)//输出 [ago, in, far, far]
}
4.List
List
val numbers = listOf("one", "two", "three", "four")
println ("Number of elements: ${numbers.size}")
println("Third element: ${numbers.get(2)}")
println("Fourth element: ${numbers[3]}")
println("Index of element "two" ${numbers.indexOf("two")}")
List元素(包括空值)可以重复:List可以包含任意数量的相同对象或单个对象的出现。如果两个List在相同的位置具有相同大小和相同结构的元素,则认为它们是相等的
val bob = Person("Bob", 31)
val people= listOf(Person("Adam", 20), bob, bob)
val people2= listOf(Person("Adam", 20), Person("Bob", 31), bob)
println (people== people2)
bob.age= 32
println(people== people2)
MutableList是可以进行写操作的 List,例如用于在特定位置添加或删除元素
val numbers = mutableListOf(1, 2, 3, 4)
numbers.add(5)
numbers.removeAt(1)
numbers[0] = 0
numbers.shuffle()
println(numbers)
在 Kotlin 中,List 的默认实现是 ArrayList
5.Set
Set
val numbers = setOf(1, 2, 3, 4)
println("Number of elements: ${numbers.size}")
if (numbers.contains(1))
println("1 is in the set")
val numbersBackwards= setOf(4, 3, 2, 1)
println("The sets are equal: ${numbers == numbersBackwards}")
MutableSet 是一个带有来自 MutableCollection 的写操作接口的 Set 。Set 的默认实现 - LinkedHashSet ‒ 保留元素插入的顺序。因此,依赖于顺序的函数,例如 first() 或 last(),会在这些 set 上返回可预测的结果。
val numbers = setOf(1, 2, 3, 4) // LinkedHashSet is the default implementationval numbersBackwards = setOf(4, 3, 2, 1)
println(numbers.first()== numbersBackwards.first())
println(numbers.first()== numbersBackwards.last())
另一种实现方式 ‒ HashSet ‒ 不声明元素的顺序,所以在它上面调用这些函数会返回不可预测的结果。 但是,HashSet 只需要较少的内存来存储相同数量的元素
6.Map
Map
val numbersMap = mapOf("key1" to 1, "key2" to 2, "key3" to 3, "key4" to 1)
println("All keys: ${numbersMap.keys}")
println("All values: ${numbersMap.values}")
if ("key2" in numbersMap) println("Value by key "key2": ${numbersMap["key2"]}")
if (1 in numbersMap.values) println("The value 1 is in the map")
if (numbersMap.containsValue(1)) println("The value 1 is in the map") // 同上
MutableMap 是一个具有写操作的 Map 接口,可以使用该接口添加一个新的键值对或更新给定键的值。
val numbersMap = mutableMapOf("one" to 1, "two" to 2)
numbersMap.put("three", 3)
numbersMap["one"] = 11
println(numbersMap)
Map默认实现 LinkedHashMap,保留元素插入的顺序,使用HashMap不声明元素的顺序
7.构造集合
7.1 由元素构造
创建集合的最常用方法是使用标准库函数 listOf
val numbersSet = setOf("one", "two", "three", "four")
val emptySet= mutableSetOf()
同样的,Map 也有这样的函数 mapOf() 与 mutableMapOf()。映射的键和值作为 Pair 对象传递(通常使用中缀函数 to 创建)。
val numbersMap = mapOf("key1" to 1, "key2" to 2, "key3" to 3, "key4" to 1)
注意,to 符号创建了一个短时存活的 Pair 对象,因此建议仅在性能不重要时才使用它。为避免过多 的内存使用,请使用其他方法。例如,可以创建可写 Map 并使用写入操作填充它。apply() 函数可以帮 助保持初始化流畅。
val numbersMap = mutableMapOf().apply { this["one"] = "1"; this["two"] = "2" }
7.2 空集合
还有用于创建没有任何元素的集合的函数:emptyList()、emptySet() 与 emptyMap()。创建空集 合时,应指定集合将包含的元素类型
val empty = emptyList()
7.3 list的初始化函数
对于 List,有一个接受 List 的大小与初始化函数的构造函数,该初始化函数根据索引定义元素的值。
val doubled = List(3, { it * 2 }) // 如果你想操作这个集合,应使用 MutableListprintln(doubled)
7.4 具体类型构造函数
要创建具体类型的集合,例如 ArrayList 或 LinkedList,可以使用这些类型的构造函数。类似的构造函数对于Set 与Map的各实现中均有提供
val linkedList = LinkedList(listOf("one", "two", "three"))
val presizedSet= HashSet(32)
7.5 复制
要创建与现有集合具有相同元素的集合,可以使用复制操作。标准库中的集合复制操作创建了具有相同 元素引用的 浅 复制集合。因此,对集合元素所做的更改会反映在其所有副本中。
在特定时刻通过集合复制函数,例如toList()、toMutableList()、toSet() 等等。创建了集合的快 照。结果是创建了一个具有相同元素的新集合 如果在源集合中添加或删除元素,则不会影响副本。副本也可以独立于源集合进行更改。
val sourceList = mutableListOf(1, 2, 3)
val copyList= sourceList.toMutableList()
val readOnlyCopyList= sourceList.toList()
sourceList.add(4)
println("Copy size: ${copyList.size}")
//readOnlyCopyList.add(4)// 编译异常println("Read-only copy size: ${readOnlyCopyList.size}")
这些函数还可用于将集合转换为其他类型,例如根据 List 构建 Set,反之亦然
val sourceList = mutableListOf(1, 2, 3)
val copySet= sourceList.toMutableSet()
copySet.add(3)
copySet.add(4)
println(copySet)
或者,可以创建对同一集合实例的新引用。使用现有集合初始化集合变量时,将创建新引用。因此,当通过引用更改集合实例时,更改将反映在其所有引用中
val sourceList = mutableListOf(1, 2, 3)
val referenceList= sourceList
referenceList.add(4)
println("Source size: ${sourceList.size}")
集合的初始化可用于限制其可变性。例如,如果构建了一个 MutableList 的 List 引用,当你试图通 过此引用修改集合的时候,编译器会抛出错误
val sourceList = mutableListOf(1, 2, 3)
val referenceList: List = sourceList
//referenceList.add(4)// 编译错误sourceList.add(4)
println(referenceList)// 显示 sourceList 当前状态
7.6 调用其他集合的函数
可以通过其他集合各种操作的结果来创建集合。例如,过滤列表会创建与过滤器匹配的新元素列表:
val numbers = listOf("one", "two", "three", "four")
val longerThan3= numbers.filter { it.length > 3 }
println(longerThan3)
映射生成转换结果列表:
val numbers = setOf(1, 2, 3)
println(numbers.map { it* 3 })
println(numbers.mapIndexed { idx, value-> value * idx })
关联生成 Map:
val numbers = listOf("one", "two", "three", "four")
println(numbers.associateWith { it.length })