本章内容
1、Java怎么又变了?
2、我们为什么要继续学习Java8?
3、Java8到底有哪些改变?
在开讲Java8专题前,我先带大家非常简略的了解一下关于2019年编程语言排行榜的情况,该内容来自Tiobe发布2019年3月编程语言排行榜:
图1-1 2019年3月编程语言排行榜
TOP5几乎没有变化,Java和C语言牢牢占据前两名。
看完这张图,身为Java程序员的小伙伴们内心肯定是狂喜的吧~心里默默的慷慨一句Java就是世界上最好的编程语言,不接受任何反驳!
那小编有点好奇,Java到底依靠什么可以排列前茅呢?
1、Java为什么又变了?
试问大家,一个怎样的语言可以吸引你,换句话说你期待一个怎样的编程语言呢?
我自己的答案是:那它必须是功能强大、使用简便,并且足够的稳定。
当今是一个充满竞争力的社会,想做到一步到位、一劳永逸真的太难了!你看看你的身边,你手机/电脑是否经常提醒你更新系统?你常使用的支付宝、淘宝等app是否总是提醒你更新最新版本?你用的手机/电脑等设备是否还在不停的更新款式?
所以,语言也需要不断改进以跟进硬件的更新或满足程序员的期待。
2、我们为什么要继续学习Java8?
及时Java11已经即将发布,但是我们目前使用最多的还是Java8,因为对于一个程序员来说,我们不追求技术的新,我们追求的是技术的稳定性。
我们需要思考一下,java的改进与java程序员之间有什么关系?
对Java而言:java必须通过添加新功能来改进,并且新功能被人使用,变化才有意义。
对我们而言:作为一个Java程序员,如果Java因功能太过老旧等原因,被其他编程语言完全替代了,那么也就意味着你的职业生涯也结束了。
所以学习java8就是在保护你作为Java程序员的职业生涯。
3、Java8到底有哪些改变?
1、速度更快
如果你的开发环境装的就是java8,那么你就已经在无形中享用Java8的新特性了。
java8对于底层的数据结构上做了些更新和改动,对垃圾回收机制(内存结构)也做了一定的改变,以及对于并行/并行流,并行的操作能够很容易的进行使用,对并行做了一些扩展和支持。
我们一起了解一下它是怎么让底层的数据结构“速度更快”呢?我们都知道底层数据结构最核心的一个就是HashMap,那么它对HashMap做了怎样的改动呢?
原来的HashMap是怎样的呢?(数组+链表)
1.8之后的HashMap是怎样的呢?(数组+链表+红黑树)HashMap1.8源码分析
当链表长度太长(默认超过8)时,链表就转换为红黑树。红黑树的改进解决了什么问题呢?
HashMap碰撞处理的优化,针对超长链的检查,时间复杂度从O(n)降到了O(log2n)
2、代码更少/清晰
我希望可以通过代码对比的形式将其改变展示出来
业务需求:因为发消息是分组发送的,现需要计算出各个小组需要发送消息的总数。
解决步骤:
1、首先遍历出有哪些小组
2、根据小组遍历出所有消息列表
3、遍历每个小组的消息数据
4、获取符合发送消息条件的数据,Count+1
最终获取到各个小组需要发送消息的总数。
图1-2使用常规for循环解决问题,案例1-3使用Java8的Stream解决问题;
图1-2 for循环
图1-3 java8的stream
如图1-2使用的是常规的for循环遍历解决方法,如图1-3使用的java8 Stream API
你对这两段段代码对比起来看有何不同呢?
是否有种层次更加明确,代码更少的感觉?
若你认为变化的不够明显。我再划分一下该段代码的层次
如图1-4所示, 仍可以实现该业务:
图1-4 java8的stream
代码是否简单明了?
1、隐式的遍历groupId
2、获取每个组的count值
3、将count值进行累加求合
这是否像是我们写的SQL语句呢?
图1-5 根据groupId获取count
Java8主要内容:
1、Lambda表达式
2、函数式接口
3、方法引用与构造器引用
4、Stream API
5、接口中的默认方法和静态方法
6、新时间日期API
7、其他新特性呢
Java8新特性简介:
速度更快,代码更少(增加了新的语法Lambda表达式),强大的Stream API,便于并行,最大化减少空指针异常 Optiona。
其中最为核心的为Lambda 表达式和Stream API
4、专题大纲
函数式数据处理
默认方法
新的日期和时间API
Optional代替null
CompletableFuture,声明性方式表达复杂的异步计算
希望大家可以继续关注我的Java8专题哦~