Kotlin数据结构

数据结构基础

什么是数据结构

在计算机科学中,数据结构(Data Structure)是计算机中存储、组织数据的方式。数据结构是各种编程语言的基础。

一些使用场景

  1. 不同的数据结构适用于不同的应用场景。比如HashMap与ConcurrentHashMap,ArrayList与LinkedList。
  2. 使用正确的数据结构可以提高算法的效率(时间和空间)。比如使用Map(常数时间复杂度)将双重循环优化为一重循环。

数据之间的逻辑结构

  1. 线性结构:一对一
    在这里插入图片描述

  2. 树形结构:一对多
    在这里插入图片描述

  3. 图、网状结构:多对多
    在这里插入图片描述

  4. 集合:五顺序、不重复
    在这里插入图片描述

数据在计算机中的存储方式(存储结构)

  1. 顺序存储结构:把逻辑上相邻的元素存储在物理位置相邻的存储单元中
  2. 链式存储结构:对逻辑上相邻的元素不要求其物理位置相邻,元素间的逻辑关系通过指针来表示
  3. 索引存储结构:在存储节点的同时,还需要建立附加的索引表
  4. 散列存储结构:以数据元素的关键字的值为自变量,通过散列函数计算出该元素的存储位置

集合框架

现代编程语言及其API中都包含了多种默认的数据结构,Java集合框架、Kotlin集合框架就是其中的代表。
因为数据结构的知识体系比较广,除了各种线性、非线性结构,还有广义表、排序、查找,而排序中又有快速排序、堆排序等。对于大部分Android开发来说,更多的是直接使用编程语言的集合框架。所以接下来通过介绍Java和Kotlin集合框架来展开。

Java的集合框架

这里先通过介绍Java的集合框架来更好的引入Kotlin。
题外:针对Java的集合框架推荐梳理类图配合阅读源码及其注释的的方式来加深理解,同理对于Java的IO框架、Android的View框架、Android的Context框架也适用。

Collection类图

在这里插入图片描述

Map类图

在这里插入图片描述

纵向对比

在这里插入图片描述

Kotlin的集合框架

Collection类图

在这里插入图片描述

Map类图

在这里插入图片描述

Kotlin的集合创建

除了直接实例化Java的集合类之外,还可以使用标准库(stdlib)中的以下函数来创建

val listOf = listOf(1, 2, 3) //ArrayList
val arrayListOf = arrayListOf(1, 2, 3) // ArrayList
val mutableListOf = mutableListOf(1, 2, 3) // ArrayList

val setOf = setOf(1, 2, 3) // LinkedHashSet
val hashSetOf = hashSetOf(1, 2, 3) // HashSet
val mutableSetOf = mutableSetOf(1, 2, 3) // LinkedHashSet 

val mapOf = mapOf("a" to 1, "b" to 2) // LinkedHashMap
val hashMapOf = hashMapOf("a" to 1, "b" to 2) // HashMap 
val mutableMapOf = mutableMapOf("a" to 1, "b" to 2) // LinkedHashMap

Kotlin集合的操作

Kotlin 标准库提供了用于对集合执行操作的多种函数。这包括简单的操作,例如获取或添加元素,以及更复杂的操作,包括搜索、排序、过滤、转换等。

转换

  • map:映射,返回将给定变换函数应用于原始集合中每个元素的结果的列表。
val numbers = setOf(1, 2, 3)
println(numbers.map { it * 3 })
val mapIndexed = numbers.mapIndexed { idx, value -> "$value + $idx" }
val s = mapIndexed[0]
println(s::class.java) // class java.lang.String
  • zip:压合,调用应用于每对元素的提供的变换函数,返回从此集合和具有相同索引的另一个集合的元素构建的列表。
val colors = listOf("red", "brown", "grey")
val animals = listOf("fox", "bear", "wolf", "dog")
println(colors.zip(animals) { color, animal -> "$color $animal"}) // [red fox, brown bear, grey wolf]
  • flatten:压平,返回给定集合中所有集合中所有元素的单个列表。
val numberSets = listOf(setOf(1, 2, 3), setOf(4, 5, 6), setOf(1, 2))
println(numberSets.flatten()) // [1, 2, 3, 4, 5, 6, 1, 2]

过滤

  • filter:过滤,返回仅包含满足条件的元素的列表。
val numberStr = listOf("one", "two", "three", "four")
val longerThan3 = numberStr.filter { it.length > 3 }
println(longerThan3) // [three, four]
  • partition:划分,将集合拆分为一对列表,其中第一个列表包含满足条件的元素,而第二个列表包含余下的元素。
val numberStr = listOf("one", "two", "three", "four")
val pair = numberStr.partition { it.length > 3 }
println(pair.first) // [three, four]
println(pair.second) // [one, two]

分组

  • groupBy:对集合的元素进行分组,并返回一个map。
val numberStr = listOf("one", "two", "three", "four")
val map = numberStr.groupBy { it.first() }
println(map) // {o=[one], t=[two, three], f=[four]}

排序

  • sorted:自然排序,排序算法是稳定的
val numberStr = listOf("one", "two", "three", "four")
println(numberStr.sorted()) // [four, one, three, two]
  • sortedWith:自定义排序
val numberStr = listOf("one", "two", "three", "four")
val lengthComparator = Comparator { str1: String, str2: String -> str1.length - str2.length }
println(numberStr.sortedWith(lengthComparator)) // [one, two, four, three]
  • sortedBy:自定义排序,内部调用的是sortedWith
val numberStr = listOf("one", "two", "three", "four")
println(numberStr.sortedBy { it.length }) // [one, two, four, three]
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Kotlin是一种现代的编程语言,它被设计为易于阅读和编写,同时提供了许多现代编程语言的功能。在数据处理方面,Kotlin提供了一些强大的工具和库,可以帮助开发者更有效地处理数据。 1. **集合类**:Kotlin提供了丰富的集合类,如List、Set、Map等,这些类提供了许多有用的方法来处理数据。例如,可以使用filter()方法过滤列表中的元素,使用map()方法将列表转换为映射,使用reduce()方法对列表进行累加等。 2. **扩展函数**:Kotlin的扩展函数是一种允许在集合类上定义新操作的技术,这使得处理数据更加简单和高效。例如,可以使用扩展函数对集合进行排序、去重、过滤等操作。 3. **流(Stream)**:Kotlin的流是处理数据的一个非常强大的工具。流是一种可以连续访问元素的数据结构,它提供了许多高级操作,如map、filter、reduce等。使用流,你可以轻松地对数据进行转换、过滤和汇总。 4. **DSL(领域特定语言)**:Kotlin的许多库(如SQL查询库、文件处理库等)都使用了DSL,这使得这些库的用法更加直观和简单。通过DSL,开发者可以更专注于数据处理逻辑,而不用花费太多精力在语法上。 5. **Kotlin协程**:Kotlin协程是Kotlin 1.5版本引入的一个新特性,它允许你在异步操作中管理并发和协程。这使得在数据处理中更有效地使用异步编程成为可能,从而提高程序的性能和响应性。 6. **DSL与标准库**:Kotlin提供了丰富的标准库,包括用于网络请求、文件操作、数据库访问等的功能。这些库通常提供了高级的API,使得数据处理变得更加简单和高效。 总的来说,Kotlin在数据处理方面提供了一个强大而灵活的生态系统,包括各种集合类、扩展函数、流、DSL和协程等工具,这些工具可以帮助开发者更有效地处理数据,提高代码的可读性和可维护性,同时降低代码的复杂度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值