Kotlin---集合与遍历

介绍

同样在Kotlin中会有List、Map、Set,而与Java中数据结构大多相同,也略有区别。Kotlin中的集合分为可变集合与不可变集合。

List及其遍历

Kotlin的List<E>接口只提供了sizegetindexOf等接口。所以我们在写代码之前需要先知道这个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")
        }
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏彭湖湾的编程世界

【算法】实现栈和队列

栈(stack) 栈(stack)是一种后进先出(LIFO)的集合类型, 即后来添加的数据会先被删除 ? 可以将其类比于下面文件的取放操作:新到的文件会被先取走...

35660
来自专栏orientlu

读 《C Traps and Pitfalls》Record

单引号实际代表一个整数 双引号代表指向无名数组的起始字符的指针(字符结尾 0) 使用库函数计算得到的字符串长度不包括结尾的0!

12430
来自专栏向治洪

Kotlin基础之内联函数

内联函数 使用高阶函数会给运行时带来一些坏处:每个函数都是一个对象,捕获闭包(如:访问函数体内的变量),内存分配(函数对象或Class),虚拟调用引入的运行过载...

22050
来自专栏微信公众号:Java团长

Java动态代理机制详解

在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,依赖注入就不用多说了,而对于Spring的核心AOP来...

14610
来自专栏向治洪

Kotlin的委托属性和区间

委托属性 委托属性 是一种通过委托实现拥有 getter 和可选 setter 的 属性,并允许实现可复用的自定义属性。例如: class Example { ...

25070
来自专栏深入浅出区块链技术

智能合约语言 Solidity 教程系列5 - 数组介绍

Solidity 是以太坊智能合约编程语言,阅读本文前,你应该对以太坊、智能合约有所了解, 如果你还不了解,建议你先看以太坊是什么

12830
来自专栏Java编程

Java动态代理机制详解

在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,依赖注入就不用多说了,而对于Spring的核心AOP来...

48510
来自专栏python3

python异常处理--try...except

在python中,用try来测试可能出现异常的语句,然后用except来处理可能出现的异常,try except的表达形式如下:

14620
来自专栏Ryan Miao

在Springmvc中获取properties属性

一些关键的属性一般都会拿出来作为配置,比如数据库连接等。在springmvc中也提供了获取property的类,比如@Value来获取。我接触spring很浅,...

49390
来自专栏编程

Kotlin学习之常用高阶函数:filter

Kotlin学习之常用高阶函数:filter Kotlin高阶函数一般是数组、集合、序列等数据结构的扩展函数,接收一个操作函数对数据进行操作,在Kotlin函数...

244100

扫码关注云+社区

领取腾讯云代金券