jdk1.8新特性(个人笔记)

1、jdk1.8 HashMap数据结构优化。

hashmap 线程不安全,实现的是map接口,继承了abstract

hashtable线程安全,线程安全肯定是加了锁,继承Dictionary,此类都已经过时不用了

原来数据结构是哈希表(数组+链表)
1.8后数组+链表+红黑树

1、hashMap默认大小(数组容量)是16,一个0-15索引的数组

2、存储元素,经过equals方法比较内容,相同的话,会覆盖;不相同,后存储的放在前面,形成了一个链表,(形成碰撞)再某种情况下,如果链表无限下去,效率非常低

3、加载因子:0.75,数组扩容,达到总容量的75%,就进行扩容,但是无法避免碰撞的情况发生

4、在1.8之后,在数组+链表+红黑树来实现hashmap

5、碰撞超过限制(当碰撞的元素个数大于8(链表长度大于8)时  & (数组)总容量大于64),会加入红黑树,效率提高。

6、1.8之后链表新进元素加到末尾,ConcurrentHashMap (锁分段机制),concurrentLevel,jdk1.8采用CAS算法(无锁算法,不再使用锁分段),数组+链表中也引入了红黑树的使用

2、default关键字
       接口里面可以写实现方法,不止是抽象类可以写了

public interface NewCharacter {
    
    public void test1();
    
    public default void test2(){
        System.out.println("我是新特性1");
    }

}

下面是实现类

public class NewCharacterImpl implements NewCharacter{

    @Override
    public void test1() {
        
    }
    
    public static void main(String[] args) {
        NewCharacter nca = new NewCharacterImpl();
        nca.test2();
    }

}

实现类可以直接调用接口中用default修饰的方法,例如上面的main方法;

好处是:default方法是所有的实现类都不需要去实现的就可以直接调用,那么比如说jdk的集合List里面增加了一个sort方法,那么如果定义为一个抽象方法,其所有的实现类如arrayList,LinkedList等都需要对其添加实现,那么现在用default定义一个默认的方法之后,其实现类可以直接使用这个方法了,这样不管是开发还是维护项目,都会大大简化代码量。


2、Lambda 表达式

是jdk1.8很重要的更新,函数式编程

函数式编程的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数!

3、函数表达式TODO

定义:“函数式接口”是指仅仅只包含一个抽象方法的接口,每一个该类型的lambda表达式都会被匹配到这个抽象方法。jdk1.8提供了一个@FunctionalInterface注解来定义函数式接口,如果我们定义的接口不符合函数式的规范便会报错。

@FunctionalInterface
public interface MyLamda {
    
    public void test1(String y);

//这里如果继续加一个抽象方法便会报错
//    public void test1();
    
//default方法可以任意定义
    default String test2(){
        return "123";
    }
    
    default String test3(){
        return "123";
    }

//static方法也可以定义
    static void test4(){
        System.out.println("234");
    }

}

Lambda的调用

MyLamda m = y -> System.out.println("ss"+y);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值