JDK1.5新特性
1、自动装箱与拆箱:原始类型与对应的包装类不用显式转换
ArrayList list=new ArrayList()----------->ArrayList<Integer>list=new ArrayList<Integer>();
2、静态导入:通过使用 import static,就可以不用指定 Constants 类名而直接使用静态成员,包括静态方法。
Math.sqrt();----------->sqrt();
3、For-Each循环:For-Each循环得加入简化了集合的遍历。
for(i=0;i<a.length;i++){......}----------->for(int i:a){......}
3、泛型:可以指定集合的元素类型。
4、变长参数:有任意个参数,看作数组。
JDK1.6新特性
1、使用Compiler API
2、轻量级Http Server API
JDK1.7新特性
1、switch中可以使用字符串
2、对集合类的语言支持:Java将包含对创建集合类的第一类语言支持。这意味着集合类的创建可以像Ruby和Perl那样了(下面的这些集合是不可变的)。
JDK1.8新特性
1、HashMap中的红黑树:HashMap中链长度大于8时采取红黑树的结构存储。
红黑树,除了添加的情况外,其他时候效率高于链表结构。
2、ConcurrentHashMap:底层采用node数组+链表+红黑树的存储结构,通过CAS算法(乐观锁机制)+synchronized来保证并发安全的实现。
put()方法过程:
1) 根据key的hash值数组中相应位置的Node还未初始化,则通过CAS插入相应的数据;
2) 如果相应位置的Node不为空,且当前该节点不处于移动状态,则对该节点加synchronized锁,如果该节点的hash不小于0,则遍历链表更新节点或插入新节点;
3) 如果该节点是TreeBin类型的节点,说明是红黑树结构,则通过putTreeVal方法往红黑树中插入节点
3、接口中可以有默认方法与静态方法,也就是接口中可以有实现方法。
默认方法中的default不可省略,子类重写时候,必须去掉default修饰符
4、Lambda表达式:lambda表达式的使用简化了代码。