JDK1.8新特性总结

1.Lambda表达式

2.default关键字

3.函数式接口

4.stream API

5.接口中的默认方法与静态方法

6.新时间日期API

在jdk1.8中对hashMap等map集合的数据结构优化。hashMap数据结构的优化
原来的hashMap采用的数据结构是哈希表(数组+链表),hashMap默认大小是16,一个0-15索引的数组,如何往里面存储元素,首先调用元素的hashcode
方法,计算出哈希码值,经过哈希算法算成数组的索引值,如果对应的索引处没有元素,直接存放,如果有对象在,那么比较它们的equals方法比较内容
如果内容一样,后一个value会将前一个value的值覆盖,如果不一样,在1.7的时候,后加的放在前面,形成一个链表,形成了碰撞,在某些情况下如果链表
无限下去,那么效率极低,碰撞是避免不了的
加载因子:0.75,数组扩容,达到总容量的75%,就进行扩容,但是无法避免碰撞的情况发生
在1.8之后,在数组+链表+红黑树来实现hashmap,当碰撞的元素个数大于8时 & 总容量大于64,会有红黑树的引入
除了添加之后,效率都比链表高,1.8之后链表新进元素加到末尾
ConcurrentHashMap (锁分段机制),concurrentLevel,jdk1.8采用CAS算法(无锁算法,不再使用锁分段),数组+链表中也引入了红黑树的使用
 

Lambda表达式

 

//这是常规的Collections的排序的写法,需要对接口方法重写
        public void test1(){
        List<String> list =Arrays.asList("aaa","fsa","ser","eere");
        Collections.sort(list, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o2.compareTo(o1);
            }
        });
        for (String string : list) {
            System.out.println(string);
        }
    }
//这是带参数类型的Lambda的写法
        public void testLamda1(){
        List<String> list =Arrays.asList("aaa","fsa","ser","eere");
        Collections.sort(list, (Comparator<? super String>) (String a,String b)->{
            return b.compareTo(a);
        }
        );
        for (String string : list) {
            System.out.println(string);
        }
    }
//这是不带参数的lambda的写法
        public void testLamda2(){
        List<String> list =Arrays.asList("aaa","fsa","ser","eere");
        Collections.sort(list, (a,b)->b.compareTo(a)
        );
        for (String string : list) {
            System.out.println(string);
        }

 

### JDK 1.8 新特性总结 JDK 1.8Java 发展历程中的一个重要版本,引入了许多新特性和改进,极大地增强了开发效率和程序性能。以下是其主要新特性的详细介绍: #### Lambda 表达式 Lambda 表达式是一种匿名函数的实现方式,允许开发者更简洁地编写功能接口的实现代码。它通过减少冗余语法来提高代码可读性。 ```java // 使用传统匿名内部类的方式 Runnable r = new Runnable() { @Override public void run() { System.out.println("Hello"); } }; // 使用 Lambda 表达式的简化写法 Runnable lambdaR = () -> System.out.println("Hello"); ``` 上述例子展示了如何利用 Lambda 表达式替代传统的匿名内部类[^1]。 #### 方法引用 方法引用是对现有方法的一种快捷调用形式,适用于已经定义好的静态方法、实例方法以及构造器。它的基本格式为 `ClassName::methodName` 或者 `objectInstance::methodName`。 ```java Supplier<Employee> sup2 = Employee::new; System.out.println(sup2.get()); Function<Integer, Employee> fun2 = Employee::new; System.out.println(fun2.apply(100)); ``` 这里的方法引用示例说明了如何使用构造器引用创建对象。另外还支持数组的构造器引用: ```java Function<Integer, String[]> funArray = String[]::new; String[] array = funArray.apply(5); ``` #### 默认方法与静态方法 Java 8 中新增了默认方法的概念,默认方法可以直接在接口中提供具体实现而不需要强制子类去重写它们。这使得向后兼容成为可能,在不破坏已有实现的情况下扩展接口的功能。 ```java public interface MyInterface { default void myDefaultMethod() { System.out.println("This is a default method."); } static void myStaticMethod() { System.out.println("This is a static method inside an interface."); } } ``` 此段代码演示了一个带有默认方法和静态方法的接口设计[^3]。 #### Stream API Stream 提供了一种高效处理集合数据的操作模式,能够链式调用多个中间操作并最终执行一次终端操作完成整个流程。 ```java List<String> names = listPerson.stream() .filter(p -> p.getAge() > 30) .map(Person::getName) .collect(Collectors.toList()); ``` 这段代码片段体现了 Streams 的强大之处——过滤、映射再到收集结果的过程一气呵成[^4]。需要注意的是同一个流不能被多次消费,否则会抛出异常[^5]。 #### Optional 类 Optional 是为了更好地解决空指针异常问题而设计的一个容器类,它可以包含也可能不含非null值。 ```java Optional<String> optionalName = Optional.ofNullable(person.getName()); optionalName.ifPresent(name -> System.out.println("The person's name is " + name)); ``` 以上代码安全地访问潜在为空的对象属性而不必担心 NullPointerException。 #### Nashorn JavaScript 引擎 Nashorn 替代 Rhino 成为新的内置 JavaScript 运行环境,提供了更快的速度和支持 ECMAScript 5.1 标准的能力。 #### 并发增强 StampedLock 锁机制相比 ReentrantReadWriteLock 更加灵活且高性能;ForkJoinPool 支持 Common Pool 等等都是并发编程方面的显著提升。 #### 时间日期 API (JSR 310) 全新的时间日期库解决了旧版 java.util.Date 和 Calendar 存在的各种缺陷,推荐使用 LocalDate、LocalTime 及 ZonedDateTime 来代替原有的 Date/Calendar 结构。 #### Type Annotations(类型注解) 除了字段、方法外,现在还可以给泛型参数添加注解,从而让编译期检查更加严格。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值