本博文只是介绍有哪些新特性,具体特性的详细介绍请翻看其他博文
红黑树
hashmap和concurrentHashMap中使用了红黑树。
性质1. 节点是红色或黑色。
性质2. 根节点是黑色。
性质3 每个叶节点(NIL节点,空节点)是黑色的。
性质4 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)
性质5. 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。
红黑树不是高度平衡的,算是一种折中,插入最多两次旋转,删除最多三次旋转,时间复杂度为常量。AVL 树是高度平衡的,频繁的插入和删除,会引起频繁的reblance,导致效率下降,时间复杂度为O(logn)。
红黑树与平衡二叉树的查找性能相同。但是当插入节点和删除节点从而破坏树的平衡性时,红黑树需要做旋转调整的次数比平衡二叉树所需的旋转调整的次数要少的多,其查找,插入,删除的操作时间复杂度均为O(Log2n)。
lambda
引入新的操作符"->",操作符左侧:表达式的参数列表,右侧:需要执行的功能。
即将一块代码赋予给变量。
语法格式一:无参数,无返回值
Runnable r2 = () -> System.out.println("hello lambda");
r2.run();
语法格式二:有一个参数,并且无返回值 (x) -> System.out.print(x);
语法格式三:若只有一个参数,小括号可以省略不写 x -> System.out.print(x);
语法格式四:有两个以上的参数,有返回值,并且Lambda体中有多条语句
Comparator<Integer> c1 = (x, y) -> {
System.out.print(Integer.compare(x, y)+"函数式接口");
return Integer.compare(x, y);
} ;
c1.compare(1, 2);
语法格式五:若Lambda体中只有一条语句,return和大括号都可以省略不写
Comparator<Integer> c1 = (x,y) -> Integer.compare(x,y);
语法格式六:Lambda表达式的参数列表的数据类型可以省略不写,因为JVM编译器可以通过上下文进行类型推断出数据类型,既“类型推断”。 (Integer x,Integer y) -> Integre.compare(x,y);
总结:
左右遇一括号省,左侧推断类型省, 能省则省,更多lambda使用的详细介绍请另外找介绍lambda的博客去看。
stream
一系列流水线式的中间操作,类似高级版本的Iterator,只需给出需要对其包含元素执行的操作,比如过滤长度大于10的字符串,获取每个字符串的首字母,具体操作如何应用到每个元素上的,交给stream来实现。
①Stream自己不会存储元素。
②Stream不会改变源对象。相反,会返回持有新结果的新Stream。
③Stream操作是延迟执行的。这意味着他们会等到需要结果的时候才执行。
parallel
fork/join框架
采用工作窃取模式,将任务拆成多个小任务分到不同的线程中执行,一个线程执行完队列中的任务可以去其他线程的队列的队尾窃取任务。
optional
Optional<T>是一个容器类,代表一个值存在或不存在,原来用null表示不存在,现在用Optional可以更好地表达且可避免空指针异常。