JDK8新特性

  • Lambda表达式

  • HashMap,ConcurrentHashMap底层优化

  • 函数式接口

  • 方法引用和构造器调用

  • Stream API

  • 接口中的默认方法和静态方法

  • 新时间日期API

 

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

树结构除了添加之外,效率都比链表高,1.8之后链表新进元素会加到末尾。

JDK7时ConcurrentHashMap 采用锁分段机制,jdk1.8采用Node节点 + CAS算法 + Synchronized(无锁算法,不再使用锁分段),数组+链表中也引入了红黑树的使用。

接口中可以定义默认实现方法和静态方法。

在接口中可以使用default和static关键字来修饰接口中定义的普通方法;

public interface Interface {

    default String getName(){
        return "zhangsan";
    }

    static String getName2(){
        return "zhangsan";
    }
}

 

新的日期API LocalDate | LocalTime | LocalDateTime

新的日期API都是不可变的,更使用于多线程的使用环境中

滑窗算法:

//滑窗算法, 求出数组中连续满足元素>4的个数
int[] arr = {2, 5, 4, 6, 8, 2, 1, 5, 8, 7, 6, 9, 11, 7};
int result = 0;
for (int i = 0; i < arr.length; i++) {
    int count = 0;
    int flag = 0;
    int num = arr[i];
    while (num > 4 && flag < arr.length) {
        count++;
        flag++;
        if (i + count == arr.length) {
            break;
        }
        num = arr[i + count];
    }
    if (count > result) {
        result = count;
    }
    i = i + flag;
}

System.out.println(result);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值