摘要:在之前已经对二叉树进行了详细的学习,这次会升级二叉树,就比之前学习的二叉树要更加的复杂麻烦了,涉及到左悬右悬的概念了。 Haffman树: 概念: Haffman树主要是用在压缩技术上,来看一张图: 压缩之后的大小相比原文件要小了很多,其它的压缩思想下面简单简述一下: 先看一下代码: 这种代码在平常
阅读全文
摘要:启发式寻路算法: 思路: 啥是启发式寻路算法呢?下面先来看一下咱们要去实现的一个效果,先来直观的感受一下: 也就是说根据起点和终点找到一个最佳能到达的路线,与咱们实际场景相关的第一时间可能就想到了用地图进行导航了,或者游戏中的寻路,所以这个算法是比较实际的,那下面从0开始剖析该算法的整个运作原理,下
阅读全文
摘要:继续学习Kotlin反射,我们知道对于Java的反射类是Class,而在Kotlin中的反射类是KClass,而在Java当中对于反射中的方法是用Method,而在Kotlin中是用KFunction来表示的,如下: 而在Java中反射属性相关的会有一个Field来表示,而在Kotlin中也有一个与
阅读全文
摘要:继续还是探讨Kotlin反射相关的知识点,说实话这块不是太好理解,待在实际工作中去对它进行实践慢慢来加深印象。 属性引用进阶: 在Kotlin中的反射其实是跟Java的反射有对应关系的,具体相关的定义都放在下面这里: 下面来看一下: 下面看一下它的细节: 继续来看这种映射: 看一下细节: 由于是咱们
阅读全文
摘要:继续来学习Kotlin反射相关的,这次主要是跟反射属性相关的东东。 属性引用(Property Reference): 属性引用的用法与函数(方法)引用的用法是完全一致,都是通过::形式来引用的。下面看代码: 其实这个属性引用就类似于在Java反射属性的方式差不多,目的都是通过反射来操作属性的一些东
阅读全文
摘要:继续学习Kotlin反射相关的东东。 KClass: 在上一次是通过类来获取它的KClass对象: 那如果是一个对象呢?与这个对象对应的类的KClass对象又是如何获取的呢?像Java也是一样有相关机制的,下面看一下: 其实使用跟用类是一样的,那结果是啥呢?运行一下: 这样就打出来了具体类型了,由于
阅读全文
摘要:在上一次https://www.cnblogs.com/webor2006/p/11530008.html中对二叉树进行了简单的入门,对于上节涉及到的树实用性倒不是太大,但是从今天开始接触的二叉树都是比较有实用价值的,像在JDK8之后很多的结构也都使用到了树,所以学好树是非常有必要的。 二叉排序树开
阅读全文
摘要:继续来研究Java调用Kotlin的一些东东。 @Throws注解: 我们知道在Kotlin中是不存在checked exception的,而在Java中是存在的,那。。如果从Java来调用Kotlin的角度那又是如何做到兼容的呢?下面写一个Kotlin代码: 接下来再用Java来调用此方法: 接下
阅读全文
摘要:@JvmName: 扩展方法相关: 先来定义一个扩展方法: 好,接下来再来定义一个扩展函数: 此时报错了。。看一下错误提示: 其中给的提示有点奇怪,第一个是很明显咱们的扩展函数木有接收参数嘛,为啥提示JVM签名是接收一个List参数呢?其实这里就涉及到了扩展函数的语义了,对于扩展函数来说,其实是将被
阅读全文
摘要:通过注解修改Kotlin的class文件名: 对于Kotlin文件在编译之后生成的class文件名默认是有一定规则的,比如: 而其实这个生成字节码的文件名称是可以被改的,之前https://www.cnblogs.com/webor2006/p/11530600.html也提及到,也就是可以用Jvm
阅读全文
摘要:异常: 在之前我们已经学习在Kotlin中的所有异常都是运行期的,而不像Java分为运行期和非运行期,下面用代码来演示一下,先建一个Java的异常: 然后在Kotlin中来调用一下该Java中的方法 很明显IOException在Java是需要检查的异常,然后在Kotlin中居然是不需要进行异常处理
阅读全文
摘要:在上一次https://www.cnblogs.com/webor2006/p/11530801.html中学习了Kotlin调用Java的使用方式及一些注意点,这次继续其这个场景进一步学习。 数组(Array): 下面先来看一下在Java中数组的情况: 但是!!如果这样写: 编译貌似没问题,但是!
阅读全文
摘要:Kotlin跟Java是百分百兼容的,换言之,也就是它们俩是可以互操作的,也就是Java可以调Kotlin,Koltin可以调Java,所以下面来看一下在Kotlin中如何来调用Java代码: 咱们来看一下这个ArrayList是Kotlin的么? 接下来往里面添加一些元素,并进行遍历: 接下来还可
阅读全文
摘要:在上一次https://www.cnblogs.com/webor2006/p/11522798.html中学习了Kotlin注解相关的东东,这次继续对Kotlin的注解继续学习: 注解也可以拥有自己的构造方法,并且构造方法也可以接收参数,注解构造方法所允许的参数类型: 1、与Java原生类型所对应
阅读全文
摘要:在上一次https://www.cnblogs.com/webor2006/p/11517957.html中对二叉树进行了入门,这次来学一学分治法,啥叫分治法呢? 而它属于五大常用算法之一,而五大常用算法为:分治、动态规划、贪心、回溯、分支界定。下面来看一下具体相关的算法。 查找技术: 首先是查找相
阅读全文
摘要:Kotlin异常与Java异常的区别: throw的Kotlin中是个表达式,这样我们可以将throw作为Elvis表达式【val test = aa ?: bb,这样的则为Elvis表达式,表示如果?前面的不为null则将前面的aa赋值给test,否则则执行?后面的赋值test】的一部分,下面看下
阅读全文
摘要:好用的集合扩展方法: 下面来看一下对于集合中好用的一些扩展方法,直接上代码: 如果我们想取出集合中的第一个值和最后一个值,用Java方式是get(0)和get(size-1),但是在Kotlin中提供有现成的方法,如下: 其中看一下它的定义,就是标准的扩展方法的定义: 另外如果想过滤元素在之前也已经
阅读全文
摘要:解构声明: 在上一次https://www.cnblogs.com/webor2006/p/11519460.html对Kotlin的解构声明进行了学习, 这里继续还是学习解构声明在集合中的应用: 其中to是一个中缀表达式: 接下来遍历该map有多少方式,这里用解构声明的方式,如下: 可见是多么的简
阅读全文
摘要:带接收者的函数字面值: Kotlin提供了这样一种功能:可以通过指定的接收者对象来调用一个函数字面值。在函数字面值内部,你可以调用接收者对象的方法而无需使用任何额外的修饰符,这一点非常类似于扩展函数,下面来看一下代码: 好怪异的语法,其中看到通过“.”的方式来声明了一个Int的函数字面值,其中函数的
阅读全文
摘要:Lambda表达式实例演练: 继续先来编写一些Lambda表达式相关的代码: 接下来想从上面的字符串数组中找到带有"h"的字符串并打印出来: 如果学习了Java8的Lambda表达式,上面这程序真的是so easy,继续更换条件,找到字符串长度大于4的字会串并打印,依葫芦画瓢: 接下来再来新需求:找
阅读全文
摘要:继续学习Kotlin的函数式编程,先定义一个高阶函数: 其实上面这种调用方式在Kotlin用得不多,反而是将Lambda表达式放到方法体中使用得较频繁,如下: 接下来定义一个扩展方法,用来对字符串进行一定条件的过滤,该条件由用户调用时动态提供,所以肯定就得用Lambda表达式啦,所以下面来看一下:
阅读全文
摘要:函数可变参数: 在上一次https://www.cnblogs.com/webor2006/p/11518425.html中学到了可变参考,关于可变参数有如下规则说明: “一个方法中,只允许一个参数为vararg,通常作为最后一个参数,如果vararg不是最后一个参数,那么其后的参数就需要通过具名参
阅读全文
摘要:位置参数与具名参数: 继续接着上一次https://www.cnblogs.com/webor2006/p/11498842.html的方法参数学习,再定义一个函数来说明具名参数的问题: 调用一下,先全部都指定参数肯定就会将默认值给替换掉了: 上面的这种方式其实是叫位置参数,接下来用具名的方式来指定
阅读全文
摘要:哈希表: 特点: 数组(顺序表):寻址容易 链表:插入与删除容易 哈希表:寻址容易,插入删除也容易的数据结构,也就是综合了上述两种数据结构的优点于一身。 Hash table: 定义: 哈希表(Hash table,也叫散列表) 是根据关键码值(Key value)而直接进行访问的数据结构,它通过把
阅读全文
摘要:Kotlin函数: 关于Kotlin函数在之前也一直在用,用fun来声明,回忆下: 下面再来整体对Kotlin的函数进行一个学习。 默认参数(default arguments): 先来定义一个函数: 相比java不一样的就是可以给参数增加默认参数,如下: 接一来调用一下该函数: 接下来还可以这样调
阅读全文
摘要:属性委托总结回顾: 在前三次已经将Kotlin委托相关的知识点进行了完整的学习了,具体博文如下: https://www.cnblogs.com/webor2006/p/11369019.html https://www.cnblogs.com/webor2006/p/11369333.html h
阅读全文
摘要:栈: 栈是限定仅在表尾进行插入和删除操作的线性表【注意它也是属于之前我们学习的线性表的一类】,允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何数据元素的栈称为空栈。栈又称为后进先出的线性表,下面用示例图来瞅一下它: 栈的实现: 顺序方式: 先来看一下它的示意图: 而它
阅读全文
摘要:关于死锁其实在之前https://www.cnblogs.com/webor2006/p/10659938.html的jvm学习中已经详细举过例子了,不过这里再来复习一下,另外是从并发这个专题领域的角度再来看下它,这里先来阐述一下相关的概念: 死锁:线程1等待线程2互斥持有的资源,而线程2也在等待线
阅读全文
摘要:在上一次https://www.cnblogs.com/webor2006/p/11446473.html中对锁的升级进行了一个比较详细的理论化的学习,先回忆一下: 编译器对于锁的优化措施: 锁消除技术: 接下来则会通过实例来分析一下JIT编译器优化的一些方式,先来看第一个例子: 很简单的程序,然后
阅读全文
摘要:在上一次https://www.cnblogs.com/webor2006/p/11446129.html的理论的最后谈到了锁的演化,如下: 下面具体来阐述一下: 偏向锁:它是针对一个线程来说, 它的主要作用就是优化同一个线程多次获取一个锁的情况;如果一个synchronized方法被一个线程访问,
阅读全文
摘要:对于synchronized关键字,我们在实际使用时可能经常听说用它是一个非常重的操作,其实这个“重”是要针对JDK的版本来说的,如今JDK已经到了12版本了,其实对这个关键字一直是存在偏见的,它底层也发生了很多的变化,所以我们也得随着JDK的版本将知识进行更新才行,所以这节继续针对锁进行深入的探讨
阅读全文
摘要:上一次https://www.cnblogs.com/webor2006/p/11442551.html中通过openjdk从c++的底层来审视了ObjectMonitor的底层实现,这次继续来探究底层,对于wait()和notify()的底层细节到底是啥样的呢?下面还是先来到openjdk中来打开
阅读全文
摘要:在我们分析synchronized关键字底层信息时,其中谈到了Monitor对象,它是由C++来实现的,那,到底它长啥样呢?我们在编写同步代码时完全木有看到该对象的存在,所以这次打算真正来瞅一下它的真正面目,而对于这个Hospot代码JDK是并没有开源的,但是社区版本的JDK是开源了,在openjd
阅读全文
摘要:自旋对于synchronized关键字的底层意义与价值分析: 对于synchronized关键字的底层意义和价值分析,下面用纯理论的方式来对它进行阐述,自旋这个概念就会应运而生,还是很重要的,下面阐述下: JVM中的同步是基于进入与退出监视器对象(Monitor,也叫管程对象)来实现的,每个对象实例
阅读全文