java8新特性 1-5
1. 尚硅谷_Java8新特性_简介主要内容Java新特性简介其中最核心的为Lambda 表达式和Stream API速度更快的原因:比如一些底层的数据结构的变动,最典型的为hashmapJdk1.7 采用的是数组+链表的方式1 首先通过hash算法(hashcode方法)得到数组的索引,数组中存的是key,然后通过equal方法比较是否是相同的元素,如果是则修改该key对应的值,如果key不同,
1. 尚硅谷_Java8新特性_简介
主要内容
Java新特性简介
其中最核心的为Lambda 表达式和Stream API
速度更快的原因:
比如一些底层的数据结构的变动,最典型的为hashmap
Jdk1.7 采用的是数组+链表的方式
1 首先通过hash算法(hashcode方法)得到数组的索引,数组中存的是key,然后通过equal方法比较是否是相同的元素,如果是则修改该key对应的值,如果key不同,则将其加入到链表中,将前一个存在数组中的元素撞出去。
要知道,如果链表中存储的数据量过大后,查询效率是很低的。
Jdk1.8后,就不再仅仅是 数组-链表 的数据结构了。
变为 : 数组-链表-红黑树
如果说当碰撞元素的个数8(链表),并且总容量大于64,会将链表转为红黑树
此时除了添加外,其他效率都比链表高
红黑树存储
然后ConcurrentHashMap 也从段机制改为CAS无锁算法了。
对底层内存结构也有变化
以前:栈、堆、方法区
其中方法区属于堆中永久区的一部分
Lambda 减少代码量
Stream API 操作数据
2. 尚硅谷_Java8新特性_为什么使用 Lambda 表达式
Lambda表达式
为什么使用Lambda?
原来使用匿名内部类的情况
其中核心代码只有一句,但是写了这么多行
使用Lambda的情况
现在增加一个需求:
原来的方式
然后调用过滤
然后需求变了就需要增加一个方法,一顿复制粘贴
然后这么多冗余代码,不得优化嘛
所谓优化,最好的方式就是前辈们的设计模式
现在开始优化上面代码
1 创建一个接口
然后实现这个接口
然后使用
还是传入一个集合,然后使用MyPredicate的方式进行过滤
这样就把筛选的方式抽象出来了,可以在调用方法时动态传入。
然后调用
这样也取出了年龄大于35岁的员工。
这样的好处是,filterEmployee方法只需要写一个,如果想要更换筛选条件,需要增加一个MyPredicate的实现类
这就是策略设计模式
这就是原来的方式,算是比较好的了,起码我没想到
再优化一下,使用匿名内部类
这种也挺好
然后使用Lambda方式优化
优化方式四
假设现在除了集合数据,其他的都没有
或者获取到每个人的名字
3. 尚硅谷_Java8新特性_Lambda 基础语法
Lambda 语法学习
左侧和右侧
Lambda 表达式需要函数式接口的支持
语法一: 无参数,无返回值
原先使用方式
使用lambda
使用还同以前 : r.run()
Lambda 底层是一个方法,类似于语法糖
现在虽然没有加final,但是在匿名内部类和lambda中,仍旧不能对变量做修改
语法格式二:
语法格式3 若只有一个参数, 小括号可不写
语法格式4
如果有多条语句,必须写大括号
语法格式5
如果只有一条语句,大括号和return 都可以省略不写
语法格式6
Lambda 表达式的参数列表的数据类型可以省略不写,因为JVM编译器通过上下文可以推断出数据类型,即”类型腿短”
总结一下
左右遇一括号省
左侧腿短类型省
Lambda 表达式需要 函数式接口的支持
函数式接口: 接口中只有一个抽象方法的接口,成为函数接口
需求 : 对一个数运算
4. 尚硅谷_Java8新特性_Lambda 练习
Lambda的应用
1
5. 尚硅谷_Java8新特性_四大内置核心函数式接口
现在的问题时: 为了使用lambda ,我们还需要自己去创建一个函数式接口,这很麻烦。
所以Java提供了几个函数式接口供我们使用。
四大核心接口
Consumer 消费型接口
Supplier 供给型接口
Function 函数型接口
Predicate 断言型接口
使用
供给型接口
函数式接口
断言型接口
用于做一些判断
所以说,常用的函数式接口,已经内置在Java中了,直接使用即可。
当然不止这四个,还有其他的一些接口
更多推荐
所有评论(0)