Kotlin---集合与遍历
2018-11-01 本文已影响407人
None_Ling
介绍
同样在Kotlin中会有List、Map、Set,而与Java中数据结构大多相同,也略有区别。Kotlin中的集合分为可变集合与不可变集合。
List及其遍历
Kotlin的List<E>
接口只提供了size
、get
、indexOf
等接口。所以我们在写代码之前需要先知道这个List使用的时候会变还是不会变。
创建可变与不可变的List
在Kotlin中都是通过标准库来创建集合类,例如:
- 创建可变List:通过
mutableListOf()
,返回MutableList
对象 - 创建不可变List:通过
listOf()
,返回List
接口
class TestKotlin {
fun function() {
// 创建MutableList可以继续添加修改元素
var mutableList: MutableList<Int> = mutableListOf(1, 2)
mutableList.add(3)
mutableList.remove(4)
// 创建List不能添加和删除只能遍历
var immutableList: List<Int> = listOf(1, 2)
}
}
List的遍历
在Kotlin中的遍历和Groovy一样,都可以使用foreach
闭包来完成,也可以使用in
关键字来实现
class TestKotlin {
fun function() {
var mutableList: MutableList<Int> = mutableListOf(1, 2, 3, 4)
mutableList.forEach {
println("Mutable List Elements:$it")
}
var mutableList: MutableList<Int> = mutableListOf(1, 2)
for (value in mutableList) {
print("value:$value")
}
}
}
而过滤List中的部分数据也可以通过闭包来实现,通过filter
,我们过滤了小于1的元素。而通过first
,我们会找到第一个等于3的元素。
class TestKotlin {
fun function() {
var mutableList: MutableList<Int> = mutableListOf(1, 2, 3, 4)
var filtedList: List<Int> = mutableList.filter {
it > 1
}
var first = mutableList.first {
it == 3
}
}
}
在Kotlin的闭包中,可以使用很多方式来指定参数,如果没有指定参数的话,默认会有一个
it
参数来代表闭包的参数。也就是我们也可以使用下面的方式来指定参数的名称。这也和Groovy一样。
var filtedList: List<Int> = mutableList.filter { element ->
element > 1
}
而对于排序我们可以通过指定comparator
来完成
class TestKotlin {
fun function() {
var mutableList: MutableList<Int> = mutableListOf(1, 2, 3, 4)
mutableList.sortWith(comparator = Comparator { x, y ->
x - y
})
}
}
Map创建以及遍历
Map的创建以及访问、遍历和List有一些区别。
对于Map的创建可以通过to
关键字来完成Key-Value
的配对。而遍历可以使用forEach
的方式,也可以通过in
关键字来完成遍历
class TestKotlin {
fun function() {
var mutableMap: MutableMap<Int, String> = mutableMapOf(1 to "one", 2 to "two", 3 to "three")
mutableMap.forEach {
print("key:${it.key}...value:${it.value}")
}
for ((key, value) in mutableMap) {
print("Key:$key....Value:$value")
}
}
}
而访问Map中的Key或者Value则可以类似于Python中字典的形式访问
class TestKotlin {
fun function() {
var mutableMap: MutableMap<Int, String> = mutableMapOf(1 to "one", 2 to "two", 3 to "three")
print(mutableMap[1])
}
}
Set创建以及遍历
与List
创建差不多,Set的创建与遍历、过滤如下
class TestKotlin {
fun function() {
var mutableSet: MutableSet<Int> = mutableSetOf(1, 2, 3)
var immutableSet: Set<Int> = hashSetOf(1, 2, 3)
mutableSet.forEach {
println("$it")
}
}
}