kotlin-----集合list、map和set
2022-01-06 本文已影响0人
会写代码的小猿猴
1、kotlin中的集合
集合是可变数量(可能为0)的一组条目,kotlin标准库提供一个整套用于集合管理的工具,各种集合对于解决问题都具有重要意义,并且经常用到。kotlin中的集合与Java基本类似,主要分为一下三种:
- List:list是一个有序集合,可通过索引访问元素。同一个元素可以在list中出现多次,总结就是:元素是有序的,并且元素可以重复。
- set是唯一元素的集合,它反映了集合(set)的数学抽象,它的元素是无序的,总结就是:元素无序且元素不能重复。
- Map是一组键值对,一个键对应一个值,在Map集合里,键是唯一的,值可以重复。
2、集合的可变性与不可变性
kotlin中提供了两种集合,一种是可变集合,一种是不可变集合,可变集合就是前面加mutable的一种新的集合。
不可变集合:
var list= listOf("one","two","three")
var set= setOf("one","two","three")
以上面这种方式定义的集合元素是不可变的,不能进行添加、删除、替换操作
可变集合:
var numbers=mutablelistOf(1,2,3,4)
numbers.add(5)
numbers.removeAt(1)
numbers[0]=0
可变集合如上,可以进行添加,删除,修改操作。
集合的几种排序方式:
- 随机排序、升序排序、降序排序
fun sort(){
var numbers= mutableListOf(1,2,3,4,5)
//随机排序
numbers.shuffle()
println(numbers)
//升序排序
numbers.sort()
println(numbers)
//降序排序
numbers.sortDescending()
println(numbers)
}
- 条件排序
条件排序又称为单条件排序和多条件排序
单条件排序:
fun conditionSort() {
var languageList: MutableList<Language> = mutableListOf()
languageList.add(Language("java", 80))
languageList.add(Language("C", 80))
languageList.add(Language("dart", 90))
languageList.add(Language("kotlin", 98))
//单条件排序,根据分数排序
languageList.sortBy { it.score }
println(languageList)
}
data class Language(val name: String, val score: Int)
排序结果:
![](https://img.haomeiwen.com/i26012968/2f6b238ab708bfbf.png)
我们发现排序后因为java和C分数都是80,所以只按照分数排序谁前谁后不好控制,所以需要用到多条件排序。
多条件排序:
fun conditionSort() {
var languageList: MutableList<Language> = mutableListOf()
languageList.add(Language("java", 80))
languageList.add(Language("C", 80))
languageList.add(Language("dart", 90))
languageList.add(Language("kotlin", 98))
//多条件排序,先根据score再根据name
languageList.sortWith(compareBy({it.score},{it.name}))
println(languageList)
}
data class Language(val name: String, val score: Int)
结果:
![](https://img.haomeiwen.com/i26012968/23b39d539d95a02b.png)
注:
fun listCompare() {
val map1 = mapOf("key1" to 1, "key2" to 2, "key3" to 3, "key4" to 4)
val map2 = mapOf( "key2" to 2, "key3" to 3,"key1" to 1, "key4" to 4)
println("map1==map2? :${map1==map2}")
val list1= listOf(1,2,3,4)
val list2= listOf(4,3,2,1)
println("list1==list2?:${list1==list2}")
}
结果:
![](https://img.haomeiwen.com/i26012968/28dbd89380b8b279.png)
总结:两个键值对相同但顺序不同的map相等
两个值相同但顺序不同的list不相等