1.底层数据结构发生了改变HashMap ---------->数组+链表+红黑树 (当某一个链表长度大于 8,并且总容量大于64的时候,就把链表转成了红黑树,好处在于:除了添加以外,其他的效率都高了)
当然HashSet也就变了,ConcurrentHashMap也就变了,这个之前的默认并发级别是16(concurrentLevel=16),1.7的时候采用的是锁分段机制,1.8以后几乎就没有用了,改成和CAS算法,即无锁算法见源码如图:
内存结构的更新:
● 速度更快
● 代码更少(增加了新的语法Lambda表达式)
● 强大的Stream API
● 便于并行
● 最大化减少了空指针异常 Optional
2.方法引用:若Lambda体中的内容有方法已经实现了,我们可以使用“”方法引用“”(可以理解为方法引用是Lambda表达式的另外一种表现形式)
主要有三种语法形式:
对象::实例方法名
类::静态方法名
类::实例方法名
注意:Lambda体中调用方法的参数列表与返回值类型,要与函数式接口中的抽象方法的函数列表和返回值类型保持一致!
若Lambda参数列表中的第一参数是实例方法的调用者,而第二个参数是实例方法的参数时,可以使用ClassName::method
3.构造器引用:
格式:
ClassName::new
4.数组引用
Type::new
5.Stream ApI 中间操作
筛选与切片:filter——接受Lambda,从流中排除某些元素。
@Test //内部迭代:迭代操作由Stream API完成
public void test(){
//中间操作:不会执行任何操作
Stream<Employee> stream=employees.stream().
filter((e)->{
System.out.println("Stream API的中间操作");
return e.getAge() > 35;
});
//终止操作:一次性执行全部内容,即“”惰性求值“”
stream.forEach(System.out::println);
}
//外部迭代
@Test
public void test2(){
Iterator<Employee> it=employees.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
Limit ——截断流,使其元素不超过给定数量
映射: