Java8 新特性概述(60%)
摘要: Java8在2014年已经发布,现在已经逐渐被广大开发者所认同,越来越多的框架选用,越来越多的公司选择Java8,经过一段时间的学习,发现Java的一些改动值得学习。
特性简介
- 速度更快
Java8优化了垃圾回收机制,对底层的内存结构进行了升级,永久区被移除,用元空间代替(直接使用物理内存,而不是分配内存,OOM异常减少),MaxPremGenSize使用MaxMetaspaceSize。Java8对底层的数据结构了进行了改善,例如HashMap以前的HashMap是数组加链表结构,现在增加了红黑树的结构,使得除了添加数据的操作,其他性能都有改善,在ConcurrentHashMap中使用了CAS算法而弃用了锁分段机制。 - 代码更少
使用新的语法,Lambda表达式用更少的代码带来相同的效果。 - 便于并行
提供了现成的方法来并行化处理。 - 减少异常
优化内存,减少OOM;提供了Optinal接口来处理空对象。
Lambda表达式
Lambda是一个匿名函数,我们可以吧Lamdba表达式理解为一段可以传递的代码。使用Lambda可以写出更简洁、灵活的代码。
例如,我们要比较两个整数的大小,如果使用比较器的话,代码可以这么写:
public void testComparator(){
Comparator<Integer> comparator = new Comparator<Integer>() {
@Override
public int compare(Integer x, Integer y) {
return Integer.compare(x, y);
}
};
}
当使用了Lambda表达式以后,可以这样:
public void testComparatorLam(){
Comparator<Integer> comparator = (x, y) -> Integer.compare(x, y);
}
函数式接口
函数式接口其实本质上还是一个接口,但是它是一种特殊的接口:SAM类型的接口(Single Abstract Method)。Java8在使用Lambda时,需要函数式接口的声明。如果每次使用Lambda表达式都需要自己编写函数式接口,确实有点麻烦。因此就有了四大函数式接口:Consumer, Supplier, Funciton, Predicate
方法引用于构造器引用
Stream API
Steam不同于之前java.io.*包中的数据流,它是对集合对象功能的增强,它专注于对集合对象进行各种非常便利、高效的的聚合操作。
使用stream API可以使复杂的业务逻辑一行代码搞定:
public void test(){
list.stream()
.filter((e) - > stu.getScore > 60)
.limit(3)
.forEach(System.out:println);
}
还没有评论,来说两句吧...