Java-1129
admin
2024-03-03 17:24:05

Java8

  1. 新特性

    1. 速度更快
    2. 代码更少(lambda、stream)
    3. 强大的Stream API
    4. 便于并行
    5. 最大化减少空指针异常Optional
  2. 速度更快:对底层数据结构哈希map的优化

    在这里插入图片描述

    1. 解释说明hashmap基本原理
      1. hashmap本质是一个长度16的数组
      2. 元素的键值对以key:value的形式存储,当key相同时如果value不同则放入同一个key下的链表中,遵循先来的往后放的原则。在jdk1.8则是直接加在链表末尾
      3. hashcode方法:调用之后产生一个长串的哈希码值,码值再经过运算变成hashmap数组的索引值。
    2. hashMap在jdk8中底层实现原理与jdk7不同的说明:
      1. new HashMap(); 底层没有创建一个长度为16的数组。首次调用put()方法时才创建了长度为16的数组
      2. jdk8底层数组为: Node[] ,而非Entry[]
      3. jdk7的底层为: 数组+链表 而 jdk8的底层为: 数组+链表+红黑树
        1. 数组: 用来定位元素的位置
        2. 链表: 用来存储位置相同的元素
        3. 红黑树: 可以实现自平衡(旋转)
      4. 当数组的某一个索引位置上的元素以链表形式存储的数据个数>8,且当前数组元素总数的长度>64时,此时此索引位置上的所有数据改为使用红黑树存储;当在树上进行删除操作,使结点数等于6时,又自动转为链表存储
      5. 加载因子 :也叫扩容因子,就是当hashmap的实际包含元素达到初始化容量*加载因子时,hashmap会进行扩容,
      6. 加载因子0.75: 容量与性能的平衡结果,过大会引起更多冲突,过小会浪费太多空间。
    3. hashset的实现方式也相应改变了。
    4. ConcurrentHashMap也进行了升级,原本并发级别concurrentLevel = 16,改进后基本不用,使用CAS算法
    5. CAS无锁算法:一种乐观锁算法,销量更高,底层操作系统支持的算法。
  3. 速度更快2:底层内存结构也不一样

    1. 原本:栈、堆、方法区(堆中永久区的一部分,堆永久区主要加载类信息,几乎不会被垃圾回收区回收,只不过回收条件比较苛刻;)
      1. 堆的永久区:早在1.8之前,除sun版本的jvm其余JVM早已没有永久区,已经将方法区单独剥离出来永久区。
      2. 堆的永久区:1.8之后,彻底被干掉了,取而代之的是metaSpace元空间,它使用的是物理内存,而不是分配的内存,物理内存有多大,我就可以用多大,而不受限于分配空间。垃圾的清理取决于metaSpaceSize和MaxMetaSpaceSize
  4. 代码更少:Lambda表达式和Stream API

  5. 便于并行:对于pop、join进行了提升,从串行切换到并行

  6. 最大化减少空指针异常

    1. 提供了一个容器类Option,用于封装有可能为空的对象封装到容器类中提供解决方法
  7. 总之:最大的两个改动:lambda表达式和stream API

Lambda表达式

  1. 为什么使用lambda

    1. lambda是一个匿名函数,是一段可以传递的代码,也可以理解为函数参数。基本形式() -> {}

    2. 简化了很多无用的代码,例如:相比匿名内部类定义比较器

      		/*** 匿名内部类*/@Testpublic void test1(){//  匿名内部类实现接口,匿名内部类的实例作为参数Comparator com =  new Comparator() {@Overridepublic int compare(Integer o1, Integer o2) {return Integer.compare(o1,o2);}};TreeSet ts = new TreeSet<>(com);}/*** lambda表达式*/@Testpublic void test2(){Comparator com = (x,y) -> Integer.compare(x,y);//	更简洁可以这样写TreeSet ts = new TreeSet<>(Integer::compare);}
      
    3. 对于一些重复代码可以使用相应的设计模式进行优化,例如定义比较器接口然后进行分别实现,不过代码量也不小。

    4. 总之就是一个词,简洁。

  2. Lambda基本语法

    1. lambda操作符:"->"也叫箭头操作符。左右侧分别为不同内容:
      1. 左侧:参数列表
      2. 右侧:所需执行功能,lambda体

相关内容

热门资讯

教师专享福利!北京这些景区免票... 新京报讯 据首都教育消息,教师节将至,北京多家景区为老师们准备了专属免票福利!这份优惠合集已整理好,...
黑茶,喝的是一种境界与健康 在专门用来喝黑茶的茶具“飘逸杯”里,黑茶茶汤看起来并不像“黑茶”这个名字那样黑黢黢的一团。 玻璃器皿...
上海旅游节大巡游花车阵容抢先看... 2026上海旅游节大巡游9月12日外滩启幕,21辆全新主题花车携手21支境内外表演方队联袂登场,邀你...
原创 8... 上周门诊来了位 62 岁的张阿姨,得糖尿病快五年了,平时管嘴特别严,糖果、点心、甜饮料一概不碰,连水...
原创 餐... 2026年9月8日晚,南京浦口区泰冯路29号,墨语江南·阿婆菜餐厅户外帐篷里,灯火温润,其间还天降喜...