08 2021 档案

摘要:一、协程的启动 1.launch与async构建器都用来启动新协程 launch:我们之前已经使用过了GlobalScope的launch来启动协程,它返回一个Job async:返回一个Deferred,它也是一个Job,但是可以使用await函数获得运行的结果 除了之前结构化并发中介绍的几种指定 阅读全文
posted @ 2021-08-30 14:28 aruba_233 阅读(216) 评论(0) 推荐(0)
摘要:协程到目前为止没有一个具体的定义,但很多语言都有协程,但每个语言又有所不同,官方说协程基于线程,是轻量级的线程。在我看来,协程是一种趋势,它让我们从繁琐的多线程中释放出来,提高我们的编写代码的效率。 为什么说这是一种趋势,就像我们之前学习的函数式编程,从最开始的面向方法编程,到面向对象编程,再到函数 阅读全文
posted @ 2021-08-28 12:07 aruba_233 阅读(88) 评论(0) 推荐(0)
摘要:对于以前的Java老项目,想要使用kotlin,全部转换带来的成本代价太大了,而官方也提供了慢慢过渡到kotlin的方法,使得Java和kotlin可以互通 一、互操作性和可空性 1.Java中所有的对象都可能为空 操作Java对象时,我们有必要加上判空符 Java: public class My 阅读全文
posted @ 2021-08-26 14:18 aruba_233 阅读(122) 评论(0) 推荐(0)
摘要:函数式编程范式主要依赖于高阶函数(以函数为参数或返回值)返回的数据,这些高阶函数专用于处理各种集合,可以联合使用多个同类函数构建链式操作以创建复杂的计算行为。kotlin支持多种编程范式,所以可以灵活运用面向对象编程和函数式编程来解决问题 一、变换 变换是函数式编程中的第一大类函数,变换函数会遍历集 阅读全文
posted @ 2021-08-26 11:25 aruba_233 阅读(65) 评论(0) 推荐(0)
摘要:之间使用了kotlin的标准函数、匿名函数,觉得它十分灵活,简便。其实kotlin的标准函数就是用了扩展 一、扩展函数 1.定义扩展函数 当我们需要对一个类新增一个方法时,在Java中需要写一个子类继承它,然后添加我们的新方法。 在kotlin中,可以利用扩展增加类的功能,指定类名后就可以新增函数 阅读全文
posted @ 2021-08-25 15:33 aruba_233 阅读(27) 评论(0) 推荐(0)
摘要:kotlin作为一种高级语言,也提供了泛型,它的泛型比Java更为灵活 一、泛型类 1.定义泛型类 定义泛型类和Java差不多 class Magic<T>(_item: T) { var subOject: T = _item } data class Boy(var name: String, 阅读全文
posted @ 2021-08-25 10:33 aruba_233 阅读(381) 评论(0) 推荐(0)
摘要:上次介绍了kotlin的类定义与初始化,接下来学习对象、接口、抽象类 一、对象 1.object关键字 object,类似Java中的静态 三种使用方式: 1.1 对象声明 对应Java中的单例类,只会在内存中实例化一次 object Const { init { println("init") } 阅读全文
posted @ 2021-08-24 11:11 aruba_233 阅读(84) 评论(0) 推荐(0)
摘要:上次介绍了kotlin中的集合List、Set、Map的操作,接下来介绍kotlin中如何定义类、初始化、继承 一、类的定义 1.field 对于每个属性,kotlin会自动生成一个的field:代表属性的值,一个getter方法,一个setter方法。我们操作属性时,实际调用的是get和set方法 阅读全文
posted @ 2021-08-23 15:51 aruba_233 阅读(125) 评论(0) 推荐(0)
摘要:上次我们学习了kotlin的字符串操作、数字类型、标准库函数,接下来我们来学习集合,和其他变量类型一样,集合也分为可变和只读 一、List 1.List集合创建与元素获取 调用listOf函数创建集合,我们可以通过和数组一样的方式: "变量[下标]" 来获取元素,或者使用get函数获取 fun ma 阅读全文
posted @ 2021-08-23 09:24 aruba_233 阅读(137) 评论(0) 推荐(0)
摘要:上次我们学习了kotlin的null安全、异常、先决条件,接下来来看看kotlin的字符串操作、数字类型、标准库函数 一、字符串操作 1.字符串截取 substring函数支持IntRange类型参数,使用until创建的范围遵循左闭右开 const val title = "my day's st 阅读全文
posted @ 2021-08-22 11:54 aruba_233 阅读(96) 评论(0) 推荐(0)
摘要:上次说到匿名函数、闭包,可以比对Java发现,使用kotlin真是太方便了。接下来来学习kotlin的null安全、异常、先决条件 一 .null 使用Java时,我们需要大量的判断一个变量是否为null,否则使用是会抛出NullPointer异常。 而kotlin使用null给一个变量赋值时,在编 阅读全文
posted @ 2021-08-22 10:32 aruba_233 阅读(76) 评论(0) 推荐(0)
摘要:上篇介绍了kotlin的基本类型,变量定义、函数定义等,接下来来学习如何使用匿名函数、lambda、闭包,这将大大提高我们使用kotlin编写代码的效率,相对于Java繁琐的代码,你会爱上这种简洁 一.匿名函数 Java也有匿名函数,但是kotlin比Java简洁很多 1.函数变量 如果我们要在Ja 阅读全文
posted @ 2021-08-21 13:13 aruba_233 阅读(164) 评论(0) 推荐(0)
摘要:kotlin作为谷歌钦定的安卓开发官方语言,语法简洁,相比于Java,包含了现代语言高级特性。它也是一门跨平台语言,可以脱离虚拟机,直接编译成二进制可执行文件在各大平台运行 本文基于有一定的Java基础 一.变量常量 1.声明变量 var关键字 变量名:变量类型 = 初始值 //var关键字 变量名 阅读全文
posted @ 2021-08-21 11:04 aruba_233 阅读(92) 评论(0) 推荐(0)
摘要:最长公共子序列运用十分广泛,例如人脸识别,相似度比较等方面。子序列表示原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。 比如:“abc”,“ac”是子序列,但“ca”不是 实现代码: /** * 最长公共子序列 * * @param a * @param 阅读全文
posted @ 2021-08-19 15:21 aruba_233 阅读(83) 评论(0) 推荐(0)
摘要:堆排序:堆排序的思想比较难理解,首先将数据看成是一个二叉树,对数据进行二叉树的建立(建堆),这个过程也是排序的过程,将最小或最大的值排到根节点上,如果采用最大值,则称为最大堆,反之,称为最小堆 例如:有一个数组为[8,1,4,2,3],将他变为二叉树为: 8 1 4 2 3 要对它进行排序,可以从8 阅读全文
posted @ 2021-08-18 10:56 aruba_233 阅读(58) 评论(0) 推荐(0)
摘要:插入排序思想:开始时指针指向第二个元素,从指针位置往前进行元素比较,大的元素往后挪一位,直到找到比指针位置元素小的位置,将该位置赋值成指针指向的值,指针往后移一位,此时前面的元素都已经排好序了,往复元素比较操作,只需要找到插入的位置即可 实现代码: /** * 插入排序 * * @param num 阅读全文
posted @ 2021-08-17 10:32 aruba_233 阅读(31) 评论(0) 推荐(0)
摘要:归并排序思想:利用空间换时间,将问题分解成一个个小问题,将排序问题分解成有序数组进行合并排序,直到最后两两比对 有一个数组: 1 3 5 9 2 4 6 8,已知第0位到第3位是有序的,第4位到第7位是有序的,如何进行排序? 实现代码: /** * 将数组合并 * * @param nums * @ 阅读全文
posted @ 2021-08-17 09:11 aruba_233 阅读(24) 评论(0) 推荐(0)
摘要:选择排序思想:指针指向数组头,从指针位置到数组尾遍历最小值位置,将该位置与指针位置交换值,指针向后位移一位,循环遍历最小值 实现代码: /** * 选择排序 * * @param nums */ public void selectSort(int[] nums) { for (int i = 0; 阅读全文
posted @ 2021-08-16 15:12 aruba_233 阅读(63) 评论(0) 推荐(0)
摘要:冒泡排序思想:一个指针指向数组尾,从头开始到指针位置进行遍历,相邻元素比较,较大值交换到后面位置,直到指针位置,此时最大值存入指针位置,指针往前移动一位,循环遍历过程,如果遍历过程没有发生交换,退出循环 实现代码: /** * 冒泡排序 * * @param nums */ public void 阅读全文
posted @ 2021-08-16 13:33 aruba_233 阅读(35) 评论(0) 推荐(0)
摘要:和最小生成树不同的是,最短路径是求顶点A到B之前最短的权,不用考虑中间经过哪些顶点,只要这些路径的总和最小 Dijikstra算法:初始化一个边集合,指定一个原始点,以该点为中心,求出到当前点到别的顶点的最小权(遍历求最小权,记录另一个顶点),将权更新到边集合中,无法到达的暂时不需要处理,将另一个顶 阅读全文
posted @ 2021-08-12 08:44 aruba_233 阅读(58) 评论(0) 推荐(0)
摘要:和prim算法以顶点为出发点不同,kruskal算法以边为中心,将所有边以小到大排序,遍历边,如果当前边的两个顶点有一个没有访问过,则记录该边,直到记录的边到达顶点数-1时,即所有顶点都可以相连,为最小生成树 实现代码: public static class Kruskal { private i 阅读全文
posted @ 2021-08-11 14:19 aruba_233 阅读(24) 评论(0) 推荐(0)
摘要:最小生成树需要一个加权连通图,连通图就是所有顶点都是连在一起的,从任意一个顶点,都能到达除本身外任意一个顶点 prim算法:将顶点分成两个集合 U和 V,U用来存放每次遍历得到的与U中顶点最小路径的邻接顶点,V用来存放U中没有的顶点。U初始化存放任意一个顶点,每次从V中遍历得到与U集合中的顶点最小路 阅读全文
posted @ 2021-08-11 09:55 aruba_233 阅读(55) 评论(0) 推荐(0)
摘要:图中的元素称为“顶点”,如果两个顶点是连通的,连通的线叫作“边”,两点之间的距离叫作“权”,对于无向边(AB顶点相连,则A可以到达B,B也可以到达A),顶点A的边数叫作“度”;有向边,顶点A的边数叫作出度(AB顶点相连,A可以到达B,但B不能到达A)和入度(AB顶点相连,A不能到达B,B能到达A)。 阅读全文
posted @ 2021-08-10 14:01 aruba_233 阅读(54) 评论(0) 推荐(0)
摘要:哈夫曼树:其实就是一个压缩算法,类似于最优解 例子: 有一次考试成绩分为4个等级:A、B、C、D,班级有100人,其中获得A的人数为20人,获得B为40人,获得C为10人,获得D为30人。问:输入所有人的成绩,获取每个人成绩对应的等级,如何使得判断次数最少? 伪代码: for 100 to 0 // 阅读全文
posted @ 2021-08-09 16:06 aruba_233 阅读(47) 评论(0) 推荐(0)