JDK8新特性以及一些类的变化

一、接口interface

JDK7及其之前:
	1.接口中变量默认修饰符为:public final static
	2.接口中方法的默认修饰符为:public abstract
JDK8及其以后:
	1.接口中可以添加非抽象方法——static:定义时必须有方法体,实现类不能重写,可以通过接口名调用
	2.接口中可以添加非抽象方法——default:定义时必须添加方法体,必须写修饰符default不能省略,实现类可以重写
JDK9及其以后:
	1.新增了非抽象方法——private:定义时必须有方法体,实现类不能重写也不能访问

二、堆内存

JDK8之前:
	1.由年轻代Young、老年代Tenured、永久代PermGen构成
JDK8之后:
	1.永久代被元空间MetaSpace替代

三、自动装箱和自动拆箱

JDK5以后:
	1.引入了自动装箱和自动拆箱
	2.自动装箱:valueOf()
	例如:Integer i = Integer.valueOf(666);
	可以写成: Integer i = 666;
	3.自动拆箱:xxxValue()
	例如:int j = i.intValue();
	可以写成: int j = i;
注:Integer类提供了范围为-128~127的静态数组缓存cache,数据在范围之外的都使用new Integer创建新对象

四、String类

JDK8及其之前:
	1.底层使用的是char数组
JDK9及其之后:
	1.底层使用的是byte数组,提高效率
补充:Stringbuilder扩容机制原来的2+2

五、枚举enum

JDK5引入枚举类型:
	1.枚举里面存放的都是常量,默认使用public final static修饰,一般是用于限制取值的。

六、ArrayList

JDK7:
	1.无参构造创建ArrayList对象时,数组的默认长度为10
JDK8:
	1.无参构造创建ArrayList对象时,数组的默认长度为0
扩容机制:
	1.当容量不足时,会扩充原来长度的50%,如果扩充后还是不满足,则扩充当前新增元素所需的最小数量

七、HashMap&HashSet

JDK7及其之前:
	1.底层是(Entry)数组+链表的形式,链表采用的的是头插法。
JDK8及其之后:
	1.底层是(Node)数组+链表|红黑树的形式,链表采用的是尾插法。
	注:当链表中存储的数据大于等于8个时,会转化为红黑树的形式存储
扩容机制:
	1.HashMap默认长度为16,装填因子为0.75,阈值:16*0.175=12,当存储的数量超过这个阈值时,会自动扩容为原来的2倍,且全部数据都重新Hash,存入扩容后的HashMap中
	2.HashSet底层就是HashMap,存入的数据中存到了Key中,而value统一是同一个Object()对象。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值